欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

单向链表循环

发布时间:2025/4/16 27 豆豆
生活随笔 收集整理的这篇文章主要介绍了 单向链表循环 小编觉得挺不错的,现在分享给大家,帮大家做个参考.
#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; }

总结

以上是生活随笔为你收集整理的单向链表循环的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。