求一个链表程序
解决时间 2021-04-14 02:44
- 提问者网友:蓝琪梦莎
- 2021-04-13 04:48
是动态链表,要求能够实现添加和删除数据的功能,加上注释哈!!即可
谢谢,我是留学习用的,晕网络上的链表程序太长了,求一个简单点儿的!
谢谢
最佳答案
- 五星知识达人网友:老鼠爱大米
- 2021-04-13 05: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维一直多维,他们的空间结构要通过画图去剖析才能明白在建立链表的时候要经常想到释放,只有更好的释放才能更大的解决速度问题,多维链表的建立建议用多为变量名来建立以便更好的观察合分析,
- 2楼网友:第四晚心情
- 2021-04-13 06:51
我要举报
大家都在看
推荐资讯