数据结构 c代码2:单链表

下面是用c语言实现的单链表的一些基本操作:

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 
  4 typedef struct LNode
  5 {
  6     int elem;
  7     struct LNode *next;
  8 }LNode, *LinkList;
  9 
 10 /*单链表得初始化*/
 11 LinkList CreatList()
 12 {
 13     LinkList p = (LNode *) malloc(sizeof(LNode));  //定义一个头节点 
 14     LinkList temp = p;   //声明一个指针指向头节点 
 15     
 16     for(int i=1;i<=5;i++)
 17     {
 18         LinkList q = (LNode *) malloc(sizeof(LNode));
 19         q->elem = i;
 20         q->next = NULL;        
 21         temp->next = q;
 22         temp = q;
 23     } 
 24       
 25     return p; 
 26 }
 27 
 28 /*单链表的插入*/
 29 LinkList InsertElem(LinkList &L, int e, int pos)
 30 {
 31     LinkList temp = L;
 32     /*首先要找到插入节点的上一个节点*/
 33     for(int i=1;i<pos;i++)
 34     {
 35         if(temp == NULL)
 36         {
 37             printf("插入位置无效!");
 38             return L;
 39         }
 40         temp = temp->next;
 41     }
 42     
 43     LinkList p = (LNode *)malloc(sizeof(LNode));
 44     p->elem = e;
 45     p->next = temp->next;
 46     temp->next = p;
 47     
 48     return L;
 49 } 
 50 
 51 /*单链表的指定位置元素删除*/
 52 LinkList DelElem(LinkList &L, int e)
 53 {
 54     LinkList temp = L;
 55     /*先找到要被删除的上一个节点*/
 56     for(int i=1; i < e; i++)
 57     {
 58         temp = temp->next;
 59         if(temp == NULL)
 60             {
 61                 printf("删除的位置无效!\n");
 62                 return L; 
 63             }
 64     }     
 65     
 66     LinkList del = temp->next;
 67     temp->next = del->next;
 68     free(del);
 69     return L;
 70 } 
 71 
 72 /*单链表的查找*/
 73 int selectElem(LinkList L, int e)
 74 {
 75     LinkList temp = L;
 76     int i = 1;
 77     while(temp->next!=NULL)
 78     {
 79         temp = temp->next;
 80         if(temp->elem == e)
 81             return i;
 82         i++;
 83     }
 84     
 85     return -1;
 86 } 
 87 
 88 /*单链表的指定位置修改*/
 89 LinkList ModifyElem(LinkList &L, int pos, int e)
 90 {
 91     LinkList temp = L;
 92     /*先找到下标为pos的节点*/
 93     for(int i=1;i<=pos;i++)
 94     {
 95         temp = temp->next;
 96         if(temp == NULL)
 97             printf("位置信息无效!");
 98     }
 99     
100     temp->elem = e;
101     return L;
102 }
103 /*单链表的输出*/ 
104 void display(LinkList L)
105 {
106     LinkList temp = L;
107     while(temp->next!=NULL)
108     {
109         temp = temp->next;
110         printf("%d->",temp->elem);
111     }
112     printf("NULL\n");
113 }
114 
115 int main()
116 {
117     printf("初始化链表为:\n");
118     LinkList L;
119     L = CreatList();
120     display(L);
121     
122     printf("\n在第4个位置插入元素100:\n");
123     L = InsertElem(L, 100, 4);
124     display(L);
125     
126     printf("\n删除第3个位置的元素:\n");
127     L = DelElem(L, 3);
128     display(L);
129     
130     printf("\n查找元素100的下标:\n");
131     int pos = selectElem(L, 100);
132     
133     if(pos == -1)
134     {
135         printf("没有查到该元素!\n"); 
136     }
137     else
138         printf("位置下标为:%d\n", pos);
139         
140     printf("\n将下标为4的元素更改为1000\n");
141     L = ModifyElem(L, 4, 1000);
142     display(L);
143     system("pause");
144     return 0;
145 } 

 

上一篇:BJFUOJ:基于链式存储结构的图书信息表的创建和输出


下一篇:数据结构和算法(C)------4.线性表(2)单链表