用C语言编程:创建一个链表 并在该链表的任意位置实现添加和删除的功能,要求在同一个程序中完成!

 我来答
是学岺舜未
2020-02-26 · TA获得超过3.5万个赞
知道大有可为答主
回答量:1.3万
采纳率:33%
帮助的人:734万
展开全部
以前给别人做的一个链表,给你用功能富裕了你看看吧:
#include
"stdio.h"
struct
Node
{

Node
*pNext;

int
value;
}*pTop;
struct
Node*
Insert(struct
Node
*pNode,int
Num);
void
Del(struct
Node
*pDelNode);
struct
Node*
Search(struct
Node
*pNode,int
Num);
void
main()
{

pTop=NULL;

int
i,k,x,y;

struct
Node
*pCurrentNode,*pTempNode;

/*(1)建立带表头结点的单链表;*/

for(i=0;i<30;i++)
Insert(NULL,i);/*建立一个有30个结点的链表*/

/*(2)输出单链表中所有结点的数据域值;*/

pCurrentNode=pTop;

while(pCurrentNode!=NULL)

{

printf("%d->",pCurrentNode->value);/*遍历这个链表并输出其各结点的数据域*/

pCurrentNode=pCurrentNode->pNext;

}

/*(3)输入x,y在第一个数据域值为x的结点之后插入结点y,若无结点x,则在表尾插入结点y;*/

printf("Input
x,y");

scanf("%d,%d",&x,&y);

pCurrentNode=Search(NULL,x);

Insert(pCurrentNode,y);

/*(4)输入k,删除单链表中所有的结点k,并输出被删除结点的个数。
*/

printf("Input
k");

scanf("%d",&k);

pCurrentNode=pTop;

i=0;

while(1)

{

pTempNode=Search(pCurrentNode,x);

if(pTempNode!=NULL)

{

pCurrentNode=pTempNode->pNext;

Del(pTempNode);

i++;

}

else
break;

}

printf("%d
Nodes
was
deleted",i);

pTempNode=pTop;

while(pTop!=NULL)

{

pTop=pTempNode->pNext;

delete
pTempNode;

}
}
Node*
Insert(struct
Node
*pNode,int
Num)
{

struct
Node
*pNewNode;

pNewNode=new
Node;

pNewNode->value=Num;

if(pNode==NULL)/*无确定插入位置时将结点放在链表最后*/

{

if(pTop!=NULL)/*确定链表是否是空表*/

{

pNode=pTop;

while(pNode->pNext!=NULL)
pNode=pNode->pNext;/*找到尾结点*/

pNode->pNext=pNewNode;

}

else

{

pTop=pNewNode;

}

pNewNode->pNext=NULL;

}

else/*有确定插入位置时将结点放在指定结点之后*/

{

pNewNode->pNext=pNode->pNext;

pNode->pNext=pNewNode;

}

return
pNewNode;
}
void
Del(struct
Node
*pDelNode)
{

if(pDelNode==NULL
||
pTop==NULL)
return;/*防错处理*/

struct
Node
*pNode;

pNode=pTop;

while(pNode!=NULL
&&
pNode->pNext!=pDelNode)
pNode=pNode->pNext;/*找到指定结点的前导结点*/

if(pNode!=NULL)

{

pNode->pNext=pDelNode->pNext;

delete
pDelNode;

}
}
struct
Node*
Search(struct
Node
*pNode,int
Num)
{

struct
Node
*pSeaNode;

if(pNode==NULL)
pSeaNode=pTop;/*不指定搜索的起始位置,从表头开始*/

else
pSeaNode=pNode;/*指定了搜索的起始位置,从指定位置开始*/

while(pSeaNode!=NULL
&&
pSeaNode->value!=Num)
pSeaNode=pSeaNode->pNext;

return
pSeaNode;/*没有找到结点时返回空指针*/
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式