永发信息网

求一个链表程序

答案:3  悬赏:70  手机版
解决时间 2021-04-14 02:44

是动态链表,要求能够实现添加和删除数据的功能,加上注释哈!!即可

谢谢,我是留学习用的,晕网络上的链表程序太长了,求一个简单点儿的!

谢谢

最佳答案

#include <stdio.h>#include <stdlib.h>
struct stNode { int nData; struct stNode* pNext;};
void Add(struct stNode** pHead, int nData){ if (*pHead == NULL) { *pHead = (struct stNode*)malloc(sizeof(struct stNode)); (*pHead)->nData = nData; (*pHead)->pNext = NULL; } else { struct stNode* pTemp = *pHead; while (pTemp->pNext) { pTemp = pTemp->pNext; } pTemp->pNext = (struct stNode*)malloc(sizeof(struct stNode)); pTemp->pNext->nData = nData; pTemp->pNext->pNext = NULL; }}
void Print(struct stNode* pHead){ while (pHead) { printf("%d\n", pHead->nData); pHead = pHead->pNext; }}
int Length(struct stNode* pHead){ int nLen = 0; while (pHead) { nLen++; pHead = pHead->pNext; }
return nLen;}
void Search(struct stNode* pHead, int nData){ while (pHead) { if (pHead->nData == nData) { printf("%d %x\n", pHead->nData, pHead); } pHead = pHead->pNext; }}
void Empty(struct stNode** pHead){ struct stNode* pTempHead = *pHead; struct stNode* pTemp = pTempHead->pNext; while (pTempHead->pNext) { free(pTempHead); pTempHead = pTemp; pTemp = pTempHead->pNext; }
free(pTempHead); *pHead = NULL;
}
void Insert(struct stNode** pHead, int nData, int nPos){ struct stNode* pTempHead = *pHead; int nCurPos = 2; struct stNode* stNewHead = (struct stNode*)malloc(sizeof(struct stNode)); struct stNode* stTemp = NULL;
if (nPos > Length(pTempHead) + 1 || nPos < 1) return; if (nPos == 1) { stNewHead->nData = nData; stNewHead->pNext = pTempHead; *pHead = stNewHead; return; } while (nCurPos < nPos) { pTempHead = pTempHead->pNext; nCurPos++; } stTemp = pTempHead->pNext; pTempHead->pNext = (struct stNode*)malloc(sizeof(struct stNode)); pTempHead->pNext->nData = nData; pTempHead->pNext->pNext = stTemp;}
void Del(struct stNode** pHead, int nPos){ struct stNode* pTempHead = *pHead; if (nPos > Length(pTempHead) || nPos < 1) return;
if (nPos == 1) { struct stNode* pTemp = pTempHead->pNext; free(pTempHead); *pHead = pTemp; } else { int nCurPos = 1; struct stNode* stTemp1 = NULL, *stTemp2 = NULL; while (nCurPos < nPos) { stTemp2 = pTempHead; pTempHead = pTempHead->pNext; nCurPos++; } stTemp1 = pTempHead->pNext; free(pTempHead); stTemp2->pNext = stTemp1; }}
int main(){ struct stNode* pHead = NULL; Add(&pHead, 10);//Add A Node Add(&pHead, 20);//Add A Node Add(&pHead, 30);//Add A Node printf("Now The Data Has:\n"); Print(pHead);//Print All Nodes
printf("Insert The Data In Pos 3:\n"); Insert(&pHead, 40, 3);//Insert Node Print(pHead);
printf("Delete The Data From Pos 4\n"); Del(&pHead, 4);//Delete Node
printf("Now The Data Has:\n"); Print(pHead);
printf("After Empty All Data,The Data Has:\n"); Empty(&pHead);//Empty All Nodes
Print(pHead);

return 0;}
全部回答
主要分为 创建首地址,指针,相对指针定位,添加就在指针的上做手脚也就是说如果连续空间A1,A2,A3中要加入B1那么将A1的尾地址给B1头地址B1尾地址给A2头地址,这样就完成了一次添加,而删除,也就是释放空间那么只需吧要删除的前一个空间的尾地址给后一个空间首地址即可,这里首地址尾地址都是用来存放指针的,所以再建立链表的时候要注意空间的分配,从一维到2维到3维一直多维,他们的空间结构要通过画图去剖析才能明白在建立链表的时候要经常想到释放,只有更好的释放才能更大的解决速度问题,多维链表的建立建议用多为变量名来建立以便更好的观察合分析,

我给你找找,我以前编过一次,

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
关于早晨的诗歌
12日能买到当天的火票吗?
家庭电路中开关必须接在________线上,并且开
仇海川诊所这个地址在什么地方,我要处理点事
做兼职,老板不给钱,怎么办
我做美发两年多了,剪烫染吹都会,就是不精,
班级评语怎么写高中,导师对申请专业硕士学位
剪吴尊的发型需要怎么说
怀孕能玩电脑吗
谁可以教教我弄魔方啊?!
农民购买了耕田机,补贴是属于农民还是经销商?
单选题ThepeopleofNewOrleansneedtoknowt
贵州财经大学中外合办班大学第四年一定要出国
建国大业有多少明星?
2009年最潮的冬季衣服
推荐资讯
斜视的人多吗?男生多还是女生多??
房屋卖价太低,能以显失公平为由撤销买卖合同
关于高海拔地方的大气压
冒险岛日本女老板在哪打
单选题有些金属如汞、镉等通过食物进入人体会
《苏州河》美美走了之后摄影师说了一段什么话
高职高专英语三级考试难吗?
一张水泥桌子的面积是1.92平方米,用边长4分
<恨透爱情恨透你>是郑源什么时候将出的新专集
五福学校很烂吗
创卫的口号,素材
DNF天空刷哪的深渊好?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?