3数据结构实验3链表.docx

上传人:b****6 文档编号:5955857 上传时间:2023-01-02 格式:DOCX 页数:18 大小:49.67KB
下载 相关 举报
3数据结构实验3链表.docx_第1页
第1页 / 共18页
3数据结构实验3链表.docx_第2页
第2页 / 共18页
3数据结构实验3链表.docx_第3页
第3页 / 共18页
3数据结构实验3链表.docx_第4页
第4页 / 共18页
3数据结构实验3链表.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

3数据结构实验3链表.docx

《3数据结构实验3链表.docx》由会员分享,可在线阅读,更多相关《3数据结构实验3链表.docx(18页珍藏版)》请在冰豆网上搜索。

3数据结构实验3链表.docx

3数据结构实验3链表

实验报告

院(系):

信息科学与技术学院课程名称:

数据结构日期:

班级

信A1321

学号

11314030119

实验室

专业

信息管理与信息系统

姓名

黄伟峰

计算机号

实验名称

实验三线性链表的运算

成绩评定

所用软件

VC或TC

教师签名

1.掌握线性链表的基本概念

2.掌握线性链表的建立、插入和删除等方法。

3.掌握线性链表的基本算法。

1.复习书上有关内容。

2.阅读实验内容1,进行程序填空,并编制相应的主函数。

3.编出实验内容的源程序。

实验总结

一、程序填空:

#include

#include

typedefcharelemtype;

typedefstructnode{

elemtypedata;

structnode*next;

}node,*linklist;

//建立链表

linklistcreatelistf()

{

charch;

linklisthead;

node*p;

head=(linklist)malloc(sizeof(node));//建立新节点

head->next=NULL;

ch=getchar();

while(ch!

='$')

{

p=(node*)malloc(sizeof(node));//建立新的节点

p->data=ch;

p->next=head->next;//将head插入头结点

head->next=p;

ch=getchar();

}

return(head);

}

//在链表的p指定节点后插入值为x的节点

intlink(node*p,charx)

{

node*s;//定义指向节点的指针

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

s->data=x;//将值插入s数据域中

s->next=p->next;

p->next=s;

return1;

}

//删除指点节点后的节点

voidDelLinkList(node*p)

{

node*q;

if(p->next!

=0)

{

q=p->next;//q指向p的后续节点

p->next=q->next;//修改p节点的指针域

free(q);//释放q

}

}

//在链表中查找指定的节点

node*lbcz(node*h,elemtypex)

{

node*p;

p=h->next;

while(p!

=0p->data!

=x)

{

p=p->next;

}

return(p);

}

//链表的输出

voidprintlink(node*h)

{

node*p;

p=h->next;

printf("\n");

while(p!

=0)

{

printf("%c",p->data);

p=p->next;

}

printf("\n");

}

voidmain()

{charx;

intm;

chary;

node*a;

node*b;

printf("输入值以'$'结束:

\n");

a=createlistf();

printlink(a);

printf("输入要查找的节点:

\n");

getchar();

scanf("%c",&x);

b=lbcz(a,x);

printlink(a);

DelLinkList(b);

printlink(a);

printf("输入要插入的值:

\n");

getchar();

scanf("%c",&y);

m=link(b,y);

if(m)

{

printf("插入成功!

");

printlink(a);

}

else

printf("插入失败!

");

}

二、源代码以及输入数据输出结果为:

//单链表中输入数据个数为10个,依次是{1,3,5,7,12,45,67,89,92,99}。

#include

#include

#include

typedefstructNode{

intdata;//数据域

structNode*pNext;//指针域

}NODE,*PNODE;//

//函数声明

PNODEcreate_list(void);

voidtreaverse_list(PNODEPHead);

PNODELocate(PNODEpHead,inte);//查找节点

intlink(PNODEp,inte);//插入函数

intmain(void)

{

inte=25;

PNODEpHead=NULL;//等价于structNode*Phead==NULL;

PNODEp;

pHead=create_list();//create_list()//功能:

创建一个非循环链表,并将该量表的空间给pHead

treaverse_list(pHead);

p=Locate(pHead,e);

treaverse_list(p);

link(p,e);

treaverse_list(pHead);

return0;

}

PNODEcreate_list(void)

{

intval;

intlen;//用于存放节点的有效个数

inti;

PNODEpHead=(PNODE)malloc(sizeof(Node));

if(NULL==pHead)

{

printf("分配失败,程序终止:

\n");

exit(-1);

}

PNODEPTail=pHead;

PTail->pNext=NULL;

printf("请输入要生成的链表数据个数:

len=");

scanf("%d",&len);

for(i=0;i

{

printf("请输入第%d个节点的值:

",i+1);

scanf("%d",&val);

PNODEpNew=(PNODE)malloc(sizeof(NODE));

if(NULL==pNew)

{

printf("分配失败,程序终止:

\n");

exit(-1);

}

pNew->data=val;

PTail->pNext=pNew;

pNew->pNext=NULL;

PTail=pNew;

}

returnpHead;

}

voidtreaverse_list(PNODEPHead)

{

PNODEp=PHead->pNext;

while(p!

=NULL)

{

printf("%5d",p->data);

p=p->pNext;

}

printf("\n");

}

PNODELocate(PNODEpHead,inte)//查找节点

{

PNODEp=pHead->pNext;

//PNODEq=(PNODE)malloc(sizeof(Node));

while(p!

=NULL){

if(p->pNext->data

{

//q=p->pNext;

p=p->pNext;

}elsebreak;

}

returnp;

}

intlink(PNODEpHead,inte)//插入

{

PNODEp=pHead;

PNODEq=(PNODE)malloc(sizeof(Node));

q->data=e;//将值插入s数据域中

q->pNext=p->pNext;

p->pNext=q;

return1;

}

三、源代码以及实验结果为

#include

#include

typedefcharelemtype;

typedefstructnode{

elemtypedata;

structnode*next;

}NODE,*PNODE;

PNODEchuanjiang()//创建函数

{

charch;

PNODEhead;

NODE*p;

printf("头插法建立链表\n");

printf("请输入字符串,以回车键结束:

");

head=(PNODE)malloc(sizeof(NODE));

head->next=0;

ch=getchar();

while(ch!

='\n')

{p=(NODE*)malloc(sizeof(NODE));

p->data=ch;

p->next=head->next;

head->next=p;

ch=getchar();

}

return(head);

}

voidplink(NODE*h)//输出

{

NODE*p;

p=h->next;

printf("\n");

while(p!

=NULL)

{printf("%c",p->data);

p=p->next;

}

printf("\n");

}

voidshanchu(PNODEH){//删除

NODE*p,*q,*r;

p=H->next;

while(p!

=NULL)

{q=p;

while(q->next!

=NULL)

{if(q->next->data==p->data)

{r=q->next;

q->next=r->next;

free(r);

}

elseq=q->next;

}

p=p->next;

}

}

voidmain(){

NODE*h;

h=chuanjiang();

printf("创建的链表是:

\n");

plink(h);

printf("删除链表中相同的值:

\n");

shanchu(h);

printf("删除后链表的值:

\n");

plink(h);

}

四、源代码以及实验结果为

//单链表中输入数据个数为10个,依次是{1,3,5,7,12,45,67,89,92,99}。

#include

#include

#include

typedefstructNode{

intdata;//数据域

structNode*pNext;//指针域

}NODE,*PNODE;//

//函数声明

PNODEcreate_list(void);

voidtreaverse_list(PNODEPHead);

//链接函数

PNODEtwoLinkList(PNODEA,PNODEB);

intmain(void)

{

PNODEA=NULL;//等价于structNode*Phead==NULL;

PNODEB=NULL;

PNODEC=NULL;

A=create_list();//create_list()//功能:

创建一个非循环链表,并将该量表的空间给pHead

B=create_list();

treaverse_list(A);

treaverse_list(B);

C=twoLinkList(A,B);

treaverse_list(C);

return0;

}

PNODEcreate_list(void)

{

intval;

intlen;//用于存放节点的有效个数

inti;

PNODEpHead=(PNODE)malloc(sizeof(Node));

if(NULL==pHead)

{

printf("分配失败,程序终止:

\n");

exit(-1);

}

PNODEPTail=pHead;

PTail->pNext=NULL;

printf("请输入要生成的链表数据个数:

len=");

scanf("%d",&len);

for(i=0;i

{

printf("请输入第%d个节点的值:

",i+1);

scanf("%d",&val);

PNODEpNew=(PNODE)malloc(sizeof(NODE));

if(NULL==pNew)

{

printf("分配失败,程序终止:

\n");

exit(-1);

}

pNew->data=val;

PTail->pNext=pNew;

pNew->pNext=NULL;

PTail=pNew;

}

returnpHead;

}

voidtreaverse_list(PNODEPHead)

{

PNODEp=PHead->pNext;

while(p!

=NULL)

{

printf("%5d",p->data);

p=p->pNext;

}

printf("\n");

}

PNODEtwoLinkList(PNODEA,PNODEB)//合并链表

{

PNODEpa=A->pNext;

PNODEpb=B->pNext;

PNODEpc;

PNODELc;

Lc=A;

Lc->pNext=NULL;

pc=Lc;

while(pa&&pb)

{

if(pa->data<=pb->data)

{

pc->pNext=pa;

pc=pa;

pa=pa->pNext;

}

else

{pc->pNext=pb;

pc=pb;

pb=pb->pNext;

}

}

pc->pNext=pa?

pa:

pb;

free(B);

return(Lc);

}

五、源代码以及实验结果为

#include

#include

typedefcharelemtype;

typedefstructnode{

elemtypedata;

structnode*next;

}NODE,*PNODE;

PNODEchuanjiang()

{

charch;

PNODEhead;

NODE*p;

head=(PNODE)malloc(sizeof(NODE));

head->next=head;

ch=getchar();

while(ch!

='\n')

{p=(NODE*)malloc(sizeof(NODE));

p->data=ch;

p->next=head->next;

head->next=p;

ch=getchar();

}

return(head);

}

voidplink(NODE*h){//单链表的输出

NODE*p;

p=h->next;

while(p!

=NULL){

printf("%c",p->data);

p=p->next;

}

printf("\n");

}

voidpooiplink(PNODEh){//循环链表的输出

NODE*p;

p=h->next;

while(p!

=h){

printf("%c",p->data);

p=p->next;

}

printf("\n");

}

voidchaifen(PNODEh,PNODE*a,PNODE*b){

NODE*ar,*br,*p;

if(h->next==h)return;

(*a)=(PNODE)malloc(sizeof(NODE));

(*a)->next=*a;

ar=*a;

(*b)=(PNODE)malloc(sizeof(NODE));

(*b)->next=*a;

br=*b;

p=h->next;

while(p!

=h)

{if(p->data>='0'&&p->data<='9')

{ar->next=p;ar=ar->next;}

else

{br->next=p;br=br->next;}

p=p->next;

}

ar->next=*a;

br->next=*b;

}

voidmain(){

NODE*a;

PNODEb,c;

a=chuanjiang();

printf("建立的循环单链表:

");

plink(a);

printf("\n");

chaifen(a,&b,&c);

printf("拆分后的数字字符链表:

");

plink(b);

printf("拆分后的字母字符链表:

");

plink(c);

}六、实验体会:

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

当前位置:首页 > 自然科学

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

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