单向链表循环
来源:互联网 发布:古龙笔下高手知乎 编辑:程序博客网 时间:2024/05/21 18:42
#include <stdio.h>#include <stdlib.h>#include <time.h>#include <malloc.h>#include<assert.h>typedef struct LoopLink{ int nValue; struct LoopLink *pNext;}LoopLink, *PLoopLink; //设置结点对象,包含两个成员,nvalue和指向下一个对象的指针pNExtPLoopLink Create(){ PLoopLink pHead = (PLoopLink)malloc(sizeof(LoopLink)); //为表头分配空间,用于存储表头 if (NULL == pHead) { printf("分配内存失败!\n"); } pHead->nValue = -9999; pHead->pNext = pHead; //为表头中的数据成员进行赋值,,,nvalue,,和pnext指针 return pHead; //返回 表头给创建的对象}void Insert(PLoopLink pHead, int nValue){ if (NULL == pHead) { printf("链表未创建成功!\n"); return ; } //查看表头是否创建, PLoopLink pCur = pHead; PLoopLink pTmp = (PLoopLink)malloc(sizeof(LoopLink)); //为插入的值(对象)开辟一个存储空间,用于存储nvalue和pnext指针 pTmp->nValue = nValue; //为插入的对象的数据成员进行赋值 pTmp->pNext = NULL; while (pCur->pNext != pHead) { if (pCur->pNext->nValue > nValue) { break; } pCur = pCur->pNext; } pTmp->pNext = pCur->pNext; pCur->pNext = pTmp; //插入操作,因为是按从小到大进行插值的,插入的对象的[nex指针指向的是大值得指针,}void Delete(PLoopLink pHead, int nValue){ if (pHead == NULL) { printf("链表未创建成功!\n"); return; } PLoopLink pCur = pHead; while (pCur->pNext!= pHead) { if (pCur->pNext->nValue == nValue) { PLoopLink pTmp = pCur->pNext; pCur->pNext = pTmp->pNext; free(pTmp); //释放存储空间 pTmp = NULL; //表示该处没有内存存储数据 } else { pCur = pCur->pNext; } }}PLoopLink Find(PLoopLink pHead, int nValue){ if (pHead == NULL) { printf("链表未创建成功!\n"); return NULL; } PLoopLink pCur = pHead; //首先,得到链表的首地址,进行查找 while (pCur->pNext!= pHead) //退出循环的条件是最后的对象的pnext指向表头,代表了循环到头 { if (pCur->pNext->nValue == nValue) //判断对象的值是不是等于查找的值 { return pCur->pNext; //如果是返回该处的地址 } else { pCur = pCur->pNext; //如果不是,则进行下一个对象的查找 } } return NULL; //都没有的话,返回NULL}bool IsEmpty(PLoopLink pHead){ if (NULL == pHead) { printf("链表未创建成功!\n"); } return pHead->pNext == pHead;}void Print(PLoopLink pHead){ if (pHead == NULL) { printf("链表未创建成功!\n"); return; } if (pHead->pNext == pHead) { printf("链表为空!\n"); return; } //循环结束的条件,对象的pnext指向表头 PLoopLink pCur = pHead->pNext; while (pCur != pHead) { printf("%d ", pCur->nValue); pCur = pCur->pNext; } printf("\n");}int main(){ PLoopLink pHead = Create(); //链表的建立,主要是建立链表的表头,为表头开辟空间 // printf("%d\n", IsEmpty(pHead)); Insert(pHead, 1); //插值操作,主要是指在表头后面,插入另一个对象,该对象的nvalue是输入的值 Insert(pHead, 5); Insert(pHead, 8); Insert(pHead, 4); Insert(pHead, 0); if (NULL != Find(pHead, 2)) //在链表中查找数值,一以链表的起始地址开始查找nvalue的值,用指针指向下一个对象,循环进行查找 { printf("链表中有该数据!\n"); } else { printf("链表中没有该数据!\n"); } Delete(pHead, 8); //删除某一元素,就是让该对象的上一个对象指向该对象的下一个对象,同时把该对象的存储空间释放 Print(pHead); //打印链表中的数据,首先从表头开始,然后指向下一个对象输出值,然后指向下一个对象输出。。。。。 system("pause"); return 0;}
0 0
- 单向循环链表
- 单向循环链表
- 单向循环链表
- 单向循环链表
- 循环单向链表
- 单向循环链表
- 循环单向链表
- 单向链表循环
- 循环单向链表
- 单向循环链表
- 单向循环链表
- 单向循环链表
- 单向循环链表
- 单向循环链表
- 单向循环链表
- 单向循环链表反转
- 单向循环链表C++
- 单向不循环链表
- ubuntu 编译 openjdk - open jdk
- iOS 监听音量调节事件
- jQuery制作返回页面顶部
- Activity的代表ActivityRecord
- oldssoj1074糖果盒(悬线法)
- 单向链表循环
- [Win32] Windows Sockets 2笔记(4)TCP Client端的实现(长数据接收+超时机制)
- 系统级ESD保护浅谈(一)
- Java 静态初始化块
- 加载系统的中图片
- UML用例图总结
- 响应式Web设计(HTML5和CSS3)工具集
- 百度影音只有图像没有声音怎么解决
- 让jquery弹出窗口不被阻挡