博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单链表
阅读量:6707 次
发布时间:2019-06-25

本文共 2893 字,大约阅读时间需要 9 分钟。

直接看实现吧:

1 #include 
2 #include
3 4 typedef int itemType; 5 struct Node; 6 typedef struct Node *pNode; 7 typedef pNode list; 8 typedef pNode position; 9 10 struct Node { 11 itemType item; 12 position next; 13 }; 14 15 list 16 MakeEmpty(list l) 17 { 18 l->item = 0; 19 l->next = NULL; 20 } 21 22 int 23 IsEmpty(list l) 24 { 25 /* 26 if (l->next == NULL) { 27 return 1; 28 } else { 29 return 0; 30 } 31 */ 32 return l->next == NULL; 33 } 34 35 int 36 IsLast(position p, list l) 37 { 38 return p->next == NULL; 39 } 40 41 position 42 Find(itemType item, list l) 43 { 44 position p; 45 46 p = l->next; 47 while (p != NULL && p->item != item) { 48 p = p->next; 49 } 50 51 return p; 52 } 53 54 position 55 FindPrevious(itemType item, list l) 56 { 57 position p; 58 59 p = l; 60 while (p->next != NULL && p->next->item != item) { 61 p = p->next; 62 } 63 64 return p; 65 } 66 67 void 68 Delete(itemType item, list l) 69 { 70 position p, tmp; 71 72 p = FindPrevious(item, l); 73 74 if (!IsLast(p, l)) { 75 tmp = p->next; 76 p->next = tmp->next; 77 free(tmp); 78 } 79 } 80 81 void 82 Insert(itemType item, list l, position p) 83 { 84 position tmp; 85 86 tmp = (position)malloc(sizeof(struct Node)); 87 if (tmp == NULL) { 88 printf("Out of space!\n"); 89 return; 90 } 91 92 tmp->item = item; 93 tmp->next = p->next; 94 p->next = tmp; 95 } 96 97 void 98 DeleteList(list l) 99 {100 position p, tmp;101 102 p = l->next;103 while (p != NULL) {104 tmp = p;105 p = p->next;106 free(tmp);107 } 108 free(l);109 }110 111 position112 Header(list l)113 {114 return l;115 }116 117 position118 First(list l)119 {120 return l->next;121 }122 123 position124 Advance( position p )125 {126 return p->next;127 }128 129 itemType130 Retrieve( position p )131 {132 return p->item;133 }134 135 void136 PrintList( list l)137 {138 position p;139 p = First(l);140 while (p != NULL) {141 printf("%d\t", Retrieve(p));142 p = Advance(p);143 }144 printf("\n");145 }146 147 int148 main(int argc, char** argv)149 {150 list l;151 // init152 l = (list)malloc(sizeof(struct Node));153 MakeEmpty(l);154 // insert some elememts155 position p;156 p = Header(l);157 for (int i = 0; i < 10; i++) {158 Insert(i, l, p);159 p = Advance(p);160 }161 // retrieve162 PrintList(l);163 // find and delete164 Delete(0, l);165 Delete(9, l);166 Delete(100, l);167 PrintList(l);168 169 system("pause");170 return 0;171 }

 

转载于:https://www.cnblogs.com/nipan/p/4074639.html

你可能感兴趣的文章
Android -- 从源码带你从EventBus2.0飚到EventBus3.0
查看>>
洛谷4月月赛R2
查看>>
innobackupex不停库的数据备份并恢复到别的服务器上【转】
查看>>
php将汉字转换为拼音和得到词语首字母(三)
查看>>
Strut2------源码下载
查看>>
UI 经常用法总结之--- UILabel UITextField (不断更新中)
查看>>
FastJson和Gson和Json数据解析分析和用法
查看>>
算法笔记_186:历届试题 高僧斗法(Java)
查看>>
css3 position fixed居中的问题
查看>>
Android之——AIDL深入
查看>>
new BigDecimal(0.01) 与 new BigDecimal(String.valueOf(0.01))的区别 (转)
查看>>
Google 最新的 Fuchsia OS【科技讯息摘要】
查看>>
一步步玩pcDuino3--mmc下的bootloader
查看>>
软件测试的四个阶段
查看>>
Java基础八--构造函数
查看>>
【Cloud Foundry】Could Foundry学习(一)——Could Foundry浅谈
查看>>
HTML5文件实现拖拽上传提示效果改进(支持三种状态提示)
查看>>
nj07---npm
查看>>
ldd命令【转】
查看>>
CF Mike and Feet (求连续区间内长度为i的最小值)单调栈
查看>>