单链表实例
1 #include<stdio.h> 2 #include<stdlib.h> 3 4 5 //定义节点类型 6 typedef struct Node 7 { 8 int data; 9 struct Node *next; 10 }Node, *LinkedList; 11 12 //初始化 13 LinkedList LinkedListInit() 14 { 15 Node *L; 16 L=(Node *)malloc(sizeof(Node)); 17 if(L==NULL) 18 { 19 exit(0); 20 } 21 else 22 { 23 L->next=NULL; 24 } 25 return L; 26 } 27 28 //单链表的建立 (头插法) 29 LinkedList LinkedListCreatH() 30 { 31 Node *L; 32 L=(Node *)malloc(sizeof(Node)); 33 L->next=NULL; 34 35 36 int x; 37 while(scanf("%d",&x) !=EOF) 38 { 39 Node *p; 40 p=(Node *)malloc(sizeof(Node)); 41 p->data=x; 42 L->next=p->next; 43 L->next=p; 44 } 45 return L; 46 } 47 48 // 单链表的建立 (尾插法) 49 LinkedList LinkedListCreatT() 50 { 51 Node *L; 52 L=(Node *)malloc(sizeof(Node)); 53 L->next=NULL; 54 Node *r; 55 r=L; 56 57 int x; 58 while(scanf("%d",&x)!=EOF) 59 { 60 Node *p; 61 p=(Node *)malloc(sizeof(Node)); 62 p->data=x; 63 r->next=p; 64 r=p; 65 } 66 r->next=NULL; 67 return L; 68 69 } 70 71 //单链表的插入,第i个单位插入x的元素 72 LinkedList LinkedListInsert(LinkedList L,int i,int x) 73 { 74 Node *pre; 75 pre=L; 76 int tempi=0; 77 for(tempi=1;tempi<i;tempi++) 78 { 79 pre=pre->next; 80 } 81 82 Node *p; 83 p=(Node *)malloc(sizeof(Node)); 84 p->data=x; 85 p->next=pre->next; 86 pre->next=p; 87 88 return L; 89 } 90 91 //单链表的删除 92 93 LinkedList LinkedListDelete(LinkedList L,int x) 94 { 95 Node *p,*pre; 96 p=L->next; 97 while(p->data !=x) 98 { 99 pre=p; 100 p=p->next; 101 } 102 pre->next=p->next; 103 free(p); 104 105 return L; 106 } 107 108 //链表内容的修改 109 LinkedList LinkedListReplace(LinkedList L,int x,int k) 110 { 111 Node *p=L->next; 112 //int i=0; 113 while(p) 114 { 115 if(p->data==x) 116 { 117 p->data=k; 118 } 119 p=p->next; 120 } 121 return L; 122 } 123 124 //便利输出单链表 125 void printList(LinkedList L) 126 { 127 Node *p=L->next; 128 int i=0; 129 while(p) 130 { 131 printf("第%d个元素的值为%d\n",++i,p->data); 132 p=p->next; 133 } 134 } 135 136 int main() 137 { 138 //创建链表 139 LinkedList list; 140 printf("请输入单链表的数据,以EOF结尾\n"); 141 list= LinkedListCreatT(); 142 printList(list); 143 144 // 插入节点 145 int i; 146 int x; 147 printf("请输入插入数据的位置:"); 148 scanf("%d",&i); 149 printf("请输入数据的值:"); 150 scanf("%d",&x); 151 LinkedListInsert(list,i,x); 152 printList(list); 153 154 //修改 155 156 printf("请输入修改的数据:"); 157 scanf("%d",&i); 158 printf("请输入修改后的数据:"); 159 scanf("%d",&x); 160 LinkedListReplace(list,i,x); 161 printList(list); 162 163 164 //删除 165 printf("请输入要删除的元素的值:"); 166 scanf("%d",&x); 167 LinkedListDelete(list,x); 168 printList(list); 169 170 171 return 0; 172 173 174 175 176 }