数据结构单链表实验.docx

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

数据结构单链表实验.docx

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

数据结构单链表实验.docx

数据结构单链表实验

#include“iostream.h”

#include"Linkedlist.h"

intmain(intargc,char*argv[])

{

listl,p,l1,l2,l3;

inti,x;

intnChoice=-1;//操作选择

do

{

//显示主菜单

cout<<"*******************************************************************************\n";

cout<<"*0-退出|1-尾插法创建单链表\n";

cout<<"*2-头插法创建单链表|3-销毁单链表\n";

cout<<"*4-求链表长度|5-求单链表中第i个元素\n";

cout<<"*6-在第i个结点前插入值为x的结点|7-链表中查找元素值为x的结点\n";

cout<<"*8-删除单链表中第i个元素结点|9-递增有序单链表插入元素\n";

cout<<"*10-单链表中奇偶数项分开|11-求两个递增有序单链表L1和L2中的公共元素\n";

cout<<"*12-删除递增有序单链表中的重复元素|13-两个递增有序单链表合并\n";

cout<<"*******************************************************************************\n";

cout<<"请输入数字选择操作:

";

cin>>nChoice;

switch(nChoice)

{

case1:

//尾插法创建单链表

cout<<"请输入单链表中元素(9999退出):

"<

l.create_r();

l.print();

l.destroy();

cout<

break;

case2:

//头插发创建单链表

cout<<"请输入单链表中元素(9999退出):

"<

p.create_h();

p.print();

l.destroy();

cout<

break;

case3:

//

cout<<"请输入单链表中元素(9999退出):

"<

l.create_r();

l.destroy();

cout<

break;

case4:

//求链表长度

cout<<"请输入单链表中元素(9999退出):

"<

l.create_r();

cout<<"链表长度为:

";

cout<

l.destroy();

break;

case5:

//求单链表中第i个元素

cout<<"请输入单链表中元素(9999退出):

"<

l.create_r();

cout<<"请输入要查找元素的序号:

";

cin>>i;

if(l.get_element(i,x)==false)cout<<"要查找的元素不存在!

"<

elsecout<<"找到您要查找的元素为:

"<

l.destroy();

break;

case6:

//在第i个结点前插入值为x的结点

cout<<"请输入单链表中元素(9999退出):

"<

l.create_r();

cout<<"请输入要插入的位置及数值"<

cout<<"位置序号:

";

cin>>i;

cout<

cout<<"数值:

";

cin>>x;

cout<

l.insert(i,x);

l.print();

l.destroy();

cout<

break;

case7:

//链表中查找元素值为x的结点

cout<<"请输入单链表中元素(9999退出):

"<

l.create_r();

cout<<"请输入要查找元素的值x:

";

cin>>x;

if(l.locate(x)==false)

cout<<"你查找的元素不存在!

"<

elsecout<<"你查找元素的指针为l:

"<

l.destroy();

case8:

//删除单链表中第i个元素结点

cout<<"请输入单链表中元素(9999退出):

"<

l.create_r();

cout<<"请输入你要删除节点的序号i:

";

cin>>i;

if(l.delete_element(i)==false)cout<<"你要删除的节点不存在!

"<

else{l.delete_element(i);

l.print();

cout<

l.destroy();

break;

case9:

//递增有序单链表插入元素

cout<<"请输入单链表中元素(9999退出):

"<

l.create_r();

cout<<"请输入你要插入的元素x:

";

cin>>x;

l.insert1(x);

l.print();

cout<

l.destroy();

break;

case10:

//单链表中奇偶数项分开

cout<<"请输入单链表中元素(9999退出):

"<

l.create_r();

cout<<"原表为:

"<

l.print();

cout<

l.division(l,l1,l2);

cout<<"偶数项为:

";

l1.print();

cout<

l1.destroy();

cout<<"奇数项为:

";

l2.print();

cout<

l2.destroy();

break;

case11:

//求两个递增有序单链表L1和L2中的公共元素

cout<<"请输入单链表L1中元素(9999退出):

"<

l1.create_r();

cout<<"请输入单链表L2中元素(9999退出):

"<

l2.create_r();

l3.interset(l1,l2,l3);

cout<<"L1和L2中的公共元素为:

";

l3.print();

cout<

break;

case12:

//删除递增有序单链表中的重复元素

cout<<"请输入单链表中元素(9999退出):

"<

l.create_r();

l.delete1();

cout<<"删除重复元素后的单链表为:

"<

l.print();

cout<

break;

}

}while(nChoice!

=0);

return0;

}

#include"iostream.h"

typedefintelementtype;

typedefstructLNode

{

elementtypedata;

structLNode*next;

}node;

classlist

{

public:

list();

intlength()const;

voiddestroy();

voidcreate_r();

voidcreate_h();

boolget_element(constinti,elementtype&x)const;

node*locate(constelementtypex)const;

boolinsert(constinti,constelementtypex);

booldelete_element(constinti);

node*get_head(){returnhead;}

intprint();

voidinsert1(constelementtypey);

voiddivision(listl,list&a,list&b);

voidinterset(lista,listb,list&c);

booldelete1();

private:

intcount;

node*head;

};

//表尾插入法建表

voidlist:

:

create_r()

{

elementtypex;

cin>>x;

node*rear=head;

while(x!

=9999)

{

count++;

node*s=newnode;

s->data=x;

rear->next=s;

rear=s;

rear->next=NULL;

cin>>x;

}

}

//表头插入法建立链表

voidlist:

:

create_h()

{

elementtypex;

node*s=newnode;

cin>>x;

while(x!

=9999)

{

count++;

s=newnode;

s->data=x;

s->next=head->next;

head->next=s;

cin>>x;

}

}

//

list:

:

list()

{

head=newnode;

head->next=NULL;

count=0;

}

intlist:

:

length()const

{returncount;}

voidlist:

:

destroy()

{

node*p,*u;

p=head;//p指向头结点

while(p)

{

u=p->next;//取得下一个结点指针

deletep;//删除当前结点

p=u;//p指向下一个结点

}

head=NULL;//头指针置空

cout<<"单链表已销毁"<

}

boollist:

:

get_element(constinti,elementtype&x)const

{

node*p=newnode;

p=head->next;

intj=1;

while(p!

=NULL&&j!

=1)

{

p=p->next;

j++;

}

if(p==NULL)returnfalse;

x=p->data;

returntrue;

}

//查找运算

node*list:

:

locate(constelementtypex)const

{

node*p=newnode;

p=head->next;

while(p!

=NULL)

{if(p->data==x)returnp;

elsep=p->next;

}

returnNULL;

}

//插入算法

boollist:

:

insert(constinti,constelementtypex)

{

node*p=newnode;

p=head;

intj=0;

while(j!

=i-1&&p!

=NULL)

{

p=p->next;

j++;

}

if(i<1||i>count+1)

returnfalse;

node*s=newnode;

s->data=x;

s->next=p->next;

p->next=s;

count++;

returntrue;

}

//删除运算

boollist:

:

delete_element(constinti)

{

node*p=newnode;

node*u=newnode;

intj=0;

p=head->next;

while(j!

=i-1&&p!

=NULL)

{

p=p->next;

j++;

}

if(i<1||i>count)

returnfalse;

u=p->next;

p->next=u->next;

deleteu;

count--;

returntrue;

}

intlist:

:

print()

{

node*p=newnode;

p=head->next;

while(p)

{

cout<data<<"\t";

p=p->next;

}

returnNULL;

}

//递增有序单链表中插入元素,并保持递增有序性

voidlist:

:

insert1(constelementtypey)

{

node*p=newnode;

p=head->next;

while(p->data<=y)

p=p->next;

node*u=newnode;

u->data=p->data;

p->data=y;

u->next=p->next;

p->next=u;

count++;

}

//将链表l中的奇偶数项节点分解开并分别放入两个链表中

voidlist:

:

division(listl,list&a,list&b)

{

node*p=newnode;

p=l.head->next;

node*rear,*rear1;

rear=a.get_head();

rear1=b.get_head();

while(p!

=NULL)

{

if(p->data%2==0)

{

a.count++;

node*m=newnode;

m->data=p->data;

rear->next=m;

rear=m;

rear->next=NULL;

}

else

{

b.count++;

node*n=newnode;

n->data=p->data;

rear1->next=n;

rear1=n;

rear1->next=NULL;

}

p=p->next;

}

}

//将两个递增有序单链表L1和L2中的公共元素,放入新的单链表L3中

voidlist:

:

interset(lista,listb,list&c)

{

node*pa,*pb,*rc,*u;

rc=c.get_head();

pa=a.get_head()->next;

pb=b.get_head()->next;

while(pa!

=NULL&&pb!

=NULL)

{

if(pa->datadata)pa=pa->next;

elseif(pa->data>pb->data)pb=pb->next;

else{

u=newnode;

u->data=pa->data;

rc->next=u;

rc=u;

c.count++;

pa=pa->next;

pb=pb->next;

}

}

rc->next=NULL;

}

//删除递增有序单链表中的重复元素

boollist:

:

delete1()

{

node*p=head->next;

if(p==NULL)returnfalse;

while(p->next!

=NULL)

{

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

{

node*u=newnode;

u=p->next;

p->next=u->next;

deleteu;

count--;

}

elsep=p->next;

}

returntrue;

}

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

当前位置:首页 > 经管营销 > 公共行政管理

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

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