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

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

以前给别人做的一个链表,给你用功能富裕了你看看吧:

#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=0i<30i++)

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/*没有找到结点时返回空指针*/

}

没有直接根据第几个元素来插入的函数,不过可以这样来插入第n个元素

list<int>::iterator

j

=

a.begin()

for(i

=

0

i

<

n

&&

j!=

a.end()

++i)

++j

a.insert(j,5,100)

读任意一个元素也可以用同样方法

headinsertdel.CPP

创建时间:2008年9月26日(星期五) 晚上9:49 | 分类:未分类 | 字数:1357 | 发送到我的Qzone | 另存为...

#include<stdio.h>

#include<malloc.h>

#include<string.h>

#define NULL 0

typedef struct JD

{ char data

struct JD * next

} JD

JD * creatlist()

{ char chJD * head,* rear,* s

head=(JD*)malloc(sizeof(JD))

rear=head

ch=getchar()

while(ch!='#')

{ s=(JD*)malloc(sizeof(JD))

s->data=chrear->next=s

rear=sch=getchar()

} rear->next=NULL

return head

}

JD * insertbefore(JD * head,JD * p,char x)

{ JD * q,* s

s=(JD*)malloc(sizeof(JD))

s->data=xq=head

while(q->next!=p) {q=q->next}

s->next=pq->next=sreturn head

}

JD * get(JD * head,int i)

{JD * pint j=1

p=head

while(p!=NULL&&j!=i)

{p=p->nextj++}

if(i==j) return p

}

JD * insert(JD * head, char x,int i)

{ JD * p

p=get(head,i)

if(p!=NULL) head=insertbefore(head,p,x)

else printf("error!\n") return head

}

JD * del(JD * head,int j)

{ JD * p

p=get(head,j )

if(p->next->next!=NULL)

{ p->next= p->next->next

}

else p->next=NULLreturn head

}

void show(JD * head)

{printf("输出链表:\n")

if(head!=NULL)

do {

printf("%c\n",* head )head=head->next

} while(head!=NULL)

}

void main()

{ int i,j,k char x,y

JD * head=creatlist()JD * p

int s

printf("which're you want to do:\n 1:insert node. \n 2:delete node.\n 3:get node.\n")

printf("enter your choose num:")

scanf("%d",&s)

switch(s)

{ case 1: printf("插入结点:")

scanf("%d,%c",&i,&x)

head=insert(head,x,i)

show(head)break

case 2: printf("删除结点:")

scanf("%d,%c",&j,&y)

head=del(head,j)

show(head)break

case 3: printf("查找结点:")

scanf("%d",&k)

p=get(head,k)

printf("输出结点:%c\n",* p)break

default:printf("error")

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11627248.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存