数据结构单链表的插入和删除Word文档格式.docx

上传人:b****6 文档编号:19759942 上传时间:2023-01-09 格式:DOCX 页数:14 大小:75.42KB
下载 相关 举报
数据结构单链表的插入和删除Word文档格式.docx_第1页
第1页 / 共14页
数据结构单链表的插入和删除Word文档格式.docx_第2页
第2页 / 共14页
数据结构单链表的插入和删除Word文档格式.docx_第3页
第3页 / 共14页
数据结构单链表的插入和删除Word文档格式.docx_第4页
第4页 / 共14页
数据结构单链表的插入和删除Word文档格式.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

数据结构单链表的插入和删除Word文档格式.docx

《数据结构单链表的插入和删除Word文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构单链表的插入和删除Word文档格式.docx(14页珍藏版)》请在冰豆网上搜索。

数据结构单链表的插入和删除Word文档格式.docx

有时候一个标点符号的问题就可能导致程序无法运行。

所以在分析调试程序的时候一定要仔细。

附加程序代码:

1、调试之后的程序如下(其中蓝色字体部分为修改过的):

#include"

stdio.h"

string.h"

stdlib.h"

ctype.h"

typedefstructnode//定义结点

{

chardata[10];

//结点的数据域为字符串

structnode*next;

//结点的指针域

}ListNode;

typedefListNode*LinkList;

//自定义LinkList单链表类型

LinkListCreatListR1(void);

//函数,用尾插入法建立带头结点的单链表

ListNode*LocateNode(LinkListhead,char*key);

//函数,按值查找结点

voidDeleteList(LinkListhead,char*key);

//函数,删除指定值的结点

voidDeleteAll(LinkListhead);

//函数,删除所有结点,释放内存

voidprintlist(LinkListhead);

//函数,打印链表中的所有值

//================主函数=================

voidmain()

{

charch[100],num[100];

LinkListhead;

head=CreatListR1();

//用尾插入法建立单链表,返回头指针

printf("

利用尾插法建立没有重复的单链表如下:

\n"

);

printlist(head);

//遍历链表输出其值

A:

Deletenode(y/n):

"

//输入"

y"

或"

n"

去选择是否删除结点

scanf("

%s"

num);

if(strcmp(num,"

)==0||strcmp(num,"

Y"

)==0){

PleaseinputDelete_data:

scanf("

ch);

//输入要删除的字符串

DeleteList(head,ch);

printlist(head);

}

else

{

输入错误!

请重新输入!

"

gotoA;

}

DeleteAll(head);

//删除所有结点,释放内存

}

//==========用尾插入法建立带头结点的单链表===========

LinkListCreatListR1(void)

charch[10];

LinkListhead=(LinkList)malloc(sizeof(ListNode));

//生成头结点

ListNode*s,*r,*pp;

r=head;

r->

next=NULL;

Input#toend"

#"

代表输入结束

PleaseinputNode_data:

//输入各结点的字符串

while(strcmp(ch,"

)!

=0)

{

pp=LocateNode(head,ch);

//按值查找结点,返回结点指针

if(pp==NULL)//没有重复的字符串,插入到链表中

{

s=(ListNode*)malloc(sizeof(ListNode));

strcpy(s->

data,ch);

r->

next=s;

r=s;

scanf("

returnhead;

//返回头指针

//===========打印链表============

voidprintlist(LinkListhead)

ListNode*p=head->

next;

//从开始结点打印

while(p)

printf("

%s,"

p->

data);

p=p->

`

//==========按值查找结点,找到则返回该结点的位置,否则返回NULL==========

ListNode*LocateNode(LinkListhead,char*key)

//从开始结点比较

while(p&

&

strcmp(p->

data,key)!

=0)//直到p为NULL或p->

data为key止

p=p->

//扫描下一个结点

returnp;

//若p=NULL则查找失败,否则p指向找到的值为key的结点

//==========删除带头结点的单链表中的指定结点=======

voidDeleteList(LinkListhead,char*key)

ListNode*p,*r,*q=head;

p=LocateNode(head,key);

//按key值查找结点的

if(p==NULL)

{//若没有找到结点,退出

positionerror"

exit(0);

while(q->

next!

=p)//p为要删除的结点,q为p的前结点

q=q->

r=q->

q->

next=r->

free(r);

//释放结点

//==========删除所有结点,释放空间===========

voidDeleteAll(LinkListhead)

ListNode*p=head,*r;

while(p->

next)

r=p->

free(p);

p=r;

free(p);

2、修改之后(增加插入结点的功能;

将建立链表的方法改为头插入法)的程序如下:

#defineboolint

#definefalse0

#definetrue1

//================定义链表中的结点=================

typedefstructnode

//定义结点的数据域为字符串

}ListNode;

typedefListNode*LinkList;

LinkListCreatListR1();

//函数,用尾插法建立带头结点的单链表

LinkListCreatListR2();

//函数,用头插法建立带头结点的单链表

voidDeleteList(LinkListhead,char*key);

voidInsert(LinkListhead);

//函数,插入指定的字符串

voidShowMenu1();

voidShowMenu2();

charx,y,ch[100];

boolquit=false;

A:

ShowMenu1();

&

x);

if(x=='

1'

)head=CreatListR1();

elseif(x=='

2'

)head=CreatListR2();

elsegotoA;

while(!

quit)

ShowMenu2();

y);

switch(y)

case'

0'

:

quit=true;

break;

case'

请输入要删除的字符串:

DeleteList(head,ch);

Insert(head);

default:

break;

//================主菜单=================

voidShowMenu1()

\n=====================================================\n\n"

1.利用尾插法建立单链表\n"

2.利用头插法建立单链表\n"

\n======================================================\n"

请选择:

voidShowMenu2()

1.删除结点\n"

2.插入结点\n"

0.退出\n"

//==========用尾插法建立带头结点的单链表===========

charch[100];

Input#toend!

\n"

PleaseinputNode_data:

}

\n恭喜,利用尾插法建立单链表成功!

所建单链表如下:

//==========用头插入法建立带头结点的单链表===========

LinkListCreatListR2(void)

//生成头结点

s=(ListNode*)malloc(sizeof(ListNode));

s->

\n恭喜,利用头插法建立单链表成功!

//===========打印链表============

if(!

p)printf("

链表为空!

else

{

%s"

p->

}

while(p&

=0)//直到p为NULL或p->

voidDeleteList(LinkListhead,charkey[100])

Positionerror!

//释放结点

删除字符串%s后新链表为:

key);

//=========申请新的内存空间,插入新结点========

voidInsert(LinkListhead)

ListNode*s,*p;

intn;

请输入要插入的字符串:

s=(LinkList)malloc(sizeof(ListNode));

s->

p=(LinkList)malloc(sizeof(ListNode));

p->

s->

请输入要插入的位置:

%d"

n);

for(p=head;

n>

0;

p=p->

next,n--);

next=p->

在第%d个位置后插入字符串%s后新链表为:

n+1,s);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 英语考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1