单链表的创建,插入,删除等操作——精简版
不多说废话,直接上代码。
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 //定义节点类型,不带头结点: 5 typedef struct Node 6 { 7 int data; 8 struct Node *next; 9 }LNode; 10 11 /** 创建链表, 12 * 从终端接收数据,使用尾部插入法完成。 13 * 成功返回1,失败返回0 14 **/ 15 int creatList(LNode *h) 16 { 17 LNode *t,*p; 18 char ch; 19 t = h; 20 p = NULL; 21 22 while((ch = getchar()) != '\n'){ 23 p = (LNode *)malloc(sizeof(LNode)); 24 if(p == NULL) 25 return 0; 26 p->data = ch; 27 p->next = NULL; 28 t->next = p; 29 t = p; 30 } 31 32 return 1; 33 } 34 35 /* 遍历打印出链表中的元素 */ 36 void printList(LNode *h) 37 { 38 LNode *p; 39 p = h->next; 40 41 while(p != NULL){ 42 printf("%c",p->data); 43 p = p->next; 44 } 45 } 46 47 /* 计算链表的长度,即链表中有几个元素 */ 48 int lengthList(LNode *h) 49 { 50 LNode *p; 51 int len = 0; 52 p = h->next; 53 54 while(p != NULL){ 55 len++; 56 p = p->next; 57 } 58 59 return len; 60 } 61 62 /** 把元素 e 插入到链表中的第 n 个位置。 63 * 成功返回1,失败返回0 64 **/ 65 int insertList(LNode *h, char e, int n) 66 { 67 LNode *p, *s; 68 int i = 1; 69 p = h->next; 70 71 while(p!=NULL && i<n){ 72 ++i; 73 p = p->next; 74 } 75 76 if(n>0 && i==n){ 77 s = (LNode*)malloc(sizeof(LNode)); 78 if(s == NULL) 79 return 0; 80 s->data = e; 81 s->next = p->next; 82 p->next = s; 83 return 1; 84 } 85 else 86 return 0; 87 } 88 89 /** 删除链表中 第 n 个元素, 90 * 成功返回1,失败返回0 91 **/ 92 int deleteList(LNode *h, int n) 93 { 94 LNode *p, *q; 95 int i = 1; 96 p = h->next; 97 98 while(p!=NULL && i<n-1){//找到要删除的节点位置 99 ++i; 100 p = p->next; 101 } 102 if(n>0 && i==n-1){ 103 q = p->next;//q指向要删除的节点 104 p->next = q->next; 105 free(q); 106 return 1; 107 } 108 else 109 return 0; 110 } 111 112 /* 找到元素 e 在链表中的位置 */ 113 int locate(LNode *h , char e) 114 { 115 LNode *p; 116 int n = 0; 117 p = h->next; 118 119 while(p!=NULL && p->data!=e){ 120 p = p->next; 121 n++; 122 } 123 if(p != NULL){ 124 return n; 125 } 126 else 127 return 0; 128 } 129 130 /* 释放单链表中所有的节点,使之成为空表 */ 131 void clearList(LNode *h) 132 { 133 LNode * p; 134 135 if(h == NULL) 136 return; 137 138 while(h->next != NULL){ 139 p = h->next; 140 free(h); 141 h = p; 142 } 143 144 }

浙公网安备 33010602011771号