数据结构C语言版实验报告docWord文档下载推荐.docx

上传人:b****2 文档编号:14037043 上传时间:2022-10-17 格式:DOCX 页数:51 大小:28.98KB
下载 相关 举报
数据结构C语言版实验报告docWord文档下载推荐.docx_第1页
第1页 / 共51页
数据结构C语言版实验报告docWord文档下载推荐.docx_第2页
第2页 / 共51页
数据结构C语言版实验报告docWord文档下载推荐.docx_第3页
第3页 / 共51页
数据结构C语言版实验报告docWord文档下载推荐.docx_第4页
第4页 / 共51页
数据结构C语言版实验报告docWord文档下载推荐.docx_第5页
第5页 / 共51页
点击查看更多>>
下载资源
资源描述

数据结构C语言版实验报告docWord文档下载推荐.docx

《数据结构C语言版实验报告docWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构C语言版实验报告docWord文档下载推荐.docx(51页珍藏版)》请在冰豆网上搜索。

数据结构C语言版实验报告docWord文档下载推荐.docx

3、修改程序:

(1)增加插入结点的功能。

(2)将建立链表的方法改为头插入法。

程序代码:

#include"

stdio.h"

string.h"

stdlib.h"

ctype.h"

typedefstructnode

{

//定义结点

chardata[10];

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

structnode*next;

//结点的指针域

}ListNode;

typedefListNode*LinkList;

LinkListCreatListR1();

//自定义LinkList单链表类型

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

LinkListCreatList(void);

ListNode*LocateNode();

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

//函数,按值查找结点

voidDeleteList();

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

voidprintlist();

voidDeleteAll();

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

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

ListNode*AddNode();

//修改程序:

增加节点。

用头插法,返回头指针

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

voidmain()

//输入各结点的字符串

charch[10],num[5];

LinkListhead;

head=CreatList();

printlist(head);

printf("

Deletenode(y/n):

"

);

scanf("

%s"

num);

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

//遍历链表输出其值

//输入"

y"

或"

n"

去选择是否删除结点

if(strcmp(num,"

)==0||strcmp(num,"

Y"

)==0){

PleaseinputDelete_data:

ch);

//输入要删除的字符串

DeleteList(head,ch);

}

Addnode?

(y/n):

//输入"

去选择是否增加结点scanf("

)==0)

head=AddNode(head);

DeleteAll(head);

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

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

LinkListCreatListR1(void)

charch[10];

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

//

ListNode*s,*r,*pp;

r=head;

r->

next=NULL;

Input#toend"

#"

代表输入结束

生成头结点

\nPleaseinputNode_data:

while(strcmp(ch,"

)!

=0){

pp=LocateNode(head,ch);

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

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

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

strcpy(s->

data,ch);

next=s;

r=s;

PleaseinputNode_data:

returnhead;

//返回头指针

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

LinkListCreatList(void)

charch[100];

LinkListhead,p;

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

head->

while

(1)

if(strcmp(ch,"

))

if(LocateNode(head,ch)==NULL)

strcpy(head->

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

p->

next=head;

head=p;

else

break;

//==========按值查找结点,找到则返回该结点的位置,否则返回ListNode*LocateNode(LinkListhead,char*key){

NULL==========

ListNode*p=head->

next;

//从开始结点比较

while(p!

=NULL&

&

strcmp(p->

data,key)!

=0)

p=p->

//扫描下一个结点

returnp;

//若p=NULL则查找失败,否则

//直到p为NULL

p指向找到的值为

或p->

data为key的结点

key止

//==========修改程序:

增加节点=======

ListNode*AddNode(LinkListhead)

ListNode*s,*pp;

\nPleaseinputaNewNode_data:

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

ok2\n"

ok3\n"

s->

next=head->

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

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);

//释放结点

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

voidprintlist(LinkListhead)

//从开始结点打印

while(p){

%s,"

p->

data);

\n"

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

voidDeleteAll(LinkListhead)

ListNode*p=head,*r;

while(p->

next){

r=p->

free(p);

p=r;

实验结果:

Input#toendPleaseinputNode_data:

bat

cat

eat

fat

hat

jat

lat

mat

#

mat,lat,jat,hat,fat,eat,cat,bat,

Deletenode(y/n):

y

mat,lat,jat,fat,eat,cat,bat,

Insertnode(y/n):

PleaseinputInsert_data:

put

position:

5

mat,lat,jat,fat,eat,put,cat,bat,

请按任意键继续...

示意图:

head

matlatjathatfateatcatbat

NULL

matlatjatfateatcatbat

心得体会:

本次实验使我们对链表的实质了解更加明确了,对链表的一些基本操作也更

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

当前位置:首页 > 医药卫生 > 基础医学

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

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