c语言实现的双向循环链表
来源:互联网 发布:java接口实现文件上传 编辑:程序博客网 时间:2024/05/18 17:40
1 c语言实现的双向循环链表
typedef struct DulNode{ struct DulNode * perNode; int data; struct DulNode * nextNode;}DulNode,*PSDulNode;typedef struct dualLink{ PSDulNode headNode; PSDulNode tailNode;}DualLick,*PLDualLink;PLDualLink InitDulList(){ PLDualLink dl = (PLDualLink)malloc(sizeof(DualLick)); if(dl->tailNode == NULL) { printf("init false"); exit(-1); } dl->headNode = dl->tailNode = NULL; return dl;}int emptyDulList(PLDualLink dl){ if(dl->headNode != NULL&&dl->tailNode != NULL) { return false; } else { return true; }}int lengthDulList(PLDualLink dl){ if(emptyDulList(dl)) { return 0; } int i = 1; PSDulNode headNode = dl->headNode; while(headNode->nextNode != dl->headNode) { i++; headNode = headNode->nextNode; } return i;}int getElent(PLDualLink dl,PSDulNode node,int position)//position 从0开始{ node = dl->headNode; for (int i = 0; i<position; i++) { node = node->nextNode; } return 1;}PSDulNode getNodeElemnt(PLDualLink dl,int position){ int length = lengthDulList(dl); position = position>length?length:position; PSDulNode node = dl->headNode; for (int i = 0; i<position; i++) { node = node->nextNode; } return node;}int insertElemt(PLDualLink dl,int a,int position)//position 从0开始算起{ int length = lengthDulList(dl); PSDulNode newNode = (PSDulNode)malloc(sizeof(DulNode)); newNode->data = a; if(dl->tailNode==NULL||dl->headNode == NULL)//空链表 { dl->tailNode = dl->headNode = newNode; dl->tailNode->nextNode = newNode; dl->tailNode->perNode = newNode; dl->headNode->nextNode = newNode; dl->headNode->perNode = newNode; } else { if(position == 0) { PSDulNode p = dl->headNode; newNode->nextNode = dl->headNode; newNode->perNode = dl->tailNode; p->perNode = newNode; dl->tailNode->nextNode = newNode; dl->headNode = newNode; } else if (position >= length) { PSDulNode p = dl->tailNode; newNode->nextNode = dl->headNode; newNode->perNode = p; p->nextNode = newNode; dl->headNode->perNode = newNode; dl->tailNode = newNode; } else { PSDulNode p = getNodeElemnt(dl,position); newNode->nextNode = p; newNode->perNode = p->perNode; p->perNode->nextNode = newNode; p->perNode = newNode; } } return 1;}int appendElemt(PLDualLink dl,int a)//position 从0开始算起、{ int length = lengthDulList(dl); insertElemt(dl, a, length); return 1;}int delElemt(PLDualLink dl,int positon){ int length = lengthDulList(dl); if(positon<0||positon>length) { printf("del error"); return 0; } if(positon == 0) { PSDulNode node = dl->headNode; node->nextNode->perNode = dl->tailNode; dl->tailNode->nextNode = node->nextNode; dl->headNode = node->nextNode; free(node); return 1; } else if(positon == length-1) { PSDulNode node = dl->tailNode; node->perNode->nextNode = dl->headNode; dl->headNode->perNode = node->perNode; dl->tailNode = node->perNode; free(node); return 1; } else { PSDulNode node = dl->headNode; for (int i = 0; i<positon; i++) { node = node->nextNode; } node->perNode->nextNode = node->nextNode; node->nextNode->perNode = node->perNode; free(node); return 1; }}int modify(PLDualLink dl,int position,int a){ PSDulNode node = getNodeElemnt(dl, position); node->data = a; return 1;}void TrasverDulList(PLDualLink dl){ if(emptyDulList(dl)) { exit(-1); } PSDulNode p = dl->headNode; do { printf("%d\n",p->data); p = p->nextNode; } while (p != dl->headNode); //不成立停止}main{ PLDualLink dl = InitDulList(); NSLog(@"%d",emptyDulList(dl)); insertElemt(dl, 100, 0); TrasverDulList(dl); insertElemt(dl, 200, 1); TrasverDulList(dl); insertElemt(dl, 300, 1); TrasverDulList(dl); NSLog(@"%d",lengthDulList(dl)); appendElemt(dl, 400); for (int i =0 ; i<10; i++) { appendElemt(dl, i+999); } delElemt(dl,lengthDulList(dl)-1); NSLog(@"%d",getNodeElemnt(dl, 1)->data); modify(dl,0,98765); TrasverDulList(dl);}
三四年的老程序员了,写一个简单的链表 写了一天 惭愧,惭愧,有什么不足的地方 请指正
0 0
- C语言实现双向循环链表
- C语言实现双向循环链表
- C语言实现双向循环链表
- C语言实现双向循环链表
- C语言双向循环链表实现
- C语言实现双向循环链表
- c语言实现双向循环链表
- 双向循环链表的C语言实现
- c语言:双向循环链表的实现
- c语言实现的双向循环链表
- C语言 实现循环链表及双向链表
- 双向循环链表实现文件C语言
- C语言实现双向循环链表[下]
- linux中C语言实现双向循环链表
- 数据结构--双向循环链表c语言实现
- C语言使用非循环双向链表实现队列
- C语言 双向循环链表的实现和结构 链表 线性表的链式实现
- 带哨兵的双向循环链表的C语言实现
- 【MySQL】安装&配置
- 深入浅出:CPU,GPU,内存的优化
- JAVA模态窗体监听事件无响应的问题
- Lambda架构 vs Kappa架构
- Digit Counting
- c语言实现的双向循环链表
- <input type="file">accept属性 调起手机摄像头 支持Safari Chrome和大部分手机内置浏览器
- Android Studio2.0 教程从入门到精通Windows版 - 安装篇
- loadrunner : 错误26374
- cocos2d-x 3.2锚点,Point,addchild,getcontensize
- C#对二进制数据进行拼接平移补位,并用BinaryWriter写入文件中
- nil、Nil、NULL和NSNull区别
- invalidJDKdirectory
- TabLayout教你是如何实现可点击的顶部导航