单链表的实现.docx

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

单链表的实现.docx

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

单链表的实现.docx

单链表的实现

实验三:

单链表的实现

电信081王智杰0808140512

一、问题描述

实现单链表的顺序存储和插入、删除、查找、遍历、清空,并加上统计,建立,求最大值操作。

二、需求分析

1、简述程序的基本功能

构造、析构、插入、删除、取值、赋值、查找清空,统计,建立,最大值操作等操作

2、输入的形式和输入值的范围

输入数字0~9,选择功能

3:

输出的形式:

选1:

选2

选3

选4:

选5:

选6:

选7:

选8:

选9:

3、测试数据要求

可以输入一组数:

1,2,3,a,b,c

显示:

三、概要设计

1、抽象数据类型

template

classLinkList

LinkNode*first;

public:

LinkList()

LinkList(constT&x)

~LinkList(){makeEmpty();}

voidmakeEmpty();

intLength()const;

LinkNode*getHead()

intSearch(Tx);

LinkNode*Locate(inti);

boolgetData(inti,T&x)const;

voidsetData(inti,T&x);

boolInsert(inti,T&x);

boolRemove(inti,T&x);

boolIsEmpty()const

boolIsFull()const{returnfalse;}

voidSort();

voidinput(inti);

voidoutput();

LinkNode*max();

voidcreate(T

*a,intn);

LinkList

-*firstLinkNode

+Length()int

+*getHead()LinkNode

+Insert(inti,T&x)void

+makeEmpty()void

+Isempty()bool

+input(int)void

+output()void

+IncreaseSize()void

+*max()LinkNode

+*Locate(inti))LinkNode

+Sort()void

LinkNode

DataT

*next

流程图

四、详细设计(要求主要变量和语句加注释)

1、#include//LinkList.h

usingnamespacestd;

template

structLinkNode{//LinkNode结构体的定义

Tdata;

LinkNode*next;

LinkNode(LinkNode*ptr=NULL){next=ptr;}

LinkNode(constT&item,LinkNode*ptr=NULL)

{data=item;next=ptr;}

};

template//LinkList类的定义

classLinkList

{

protected:

LinkNode*first;

public:

LinkList(){first=newLinkNode;}

LinkList(constT&x)

{

first=newLinkNode(x);

LinkNode*newNode;

newNode->next=first;

first=newNode;}

~LinkList(){makeEmpty();}

voidmakeEmpty();

intLength()const;

LinkNode*getHead()const{returnfirst;}

intSearch(Tx);

LinkNode*Locate(inti);

boolgetData(inti,T&x)const;

voidsetData(inti,T&x);

boolInsert(inti,T&x);

boolRemove(inti,T&x);

boolIsEmpty()const

{returnfirst->link==NULL?

true:

false;}

boolIsFull()const{returnfalse;}

voidSort();

voidinput(inti);

voidoutput();

LinkNode*max();

voidcreate(T*a,intn);

voidtidyup();

};

template//LinkList类的实现

voidLinkList:

:

makeEmpty()

{LinkNode*q;

while(first->next!

=NULL)

{q=first->next;

first->next=q->next;

deleteq;

}

};

template

intLinkList:

:

Length()const

{LinkNode*p=first->next;intcount=0;

while(p!

=NULL)

{p=p->next;count++;}

returncount;

};

template

intLinkList:

:

Search(Tx)

{LinkNode*p=first->next;inti=0;

while(p!

=NULL)

{if(p->data==x)i++;

p=p->next;}

returni;

};

template

LinkNode*LinkList:

:

Locate(inti)

{if(i<0)returnNULL;

LinkNode*p=first;

intk=0;

while(p!

=NULL&&k

{p=p->next;k++;}

returnp;

};

template

boolLinkList:

:

getData(inti,T&x)const

{if(i<=0)returnNULL;

LinkNode*p=Locate(i);

if(p==NULL)returnfalse;

else{x=p->data;returntrue;}

};

template

voidLinkList:

:

setData(inti,T&x)

{if(i<=0)return;

LinkNode*p=Locate(i);

if(p==NULL)return;

elsep->data=x;

};

template

boolLinkList:

:

Insert(inti,T&x)

{LinkNode*p=Locate(i-1);

if(p==NULL)returnfalse;

LinkNode*newNode=newLinkNode(x);

newNode->next=p->next;

p->next=newNode;

returntrue;

};

template

boolLinkList:

:

Remove(inti,T&x)

{LinkNode*p=Locate(i-1);

if(p==NULL||p->next==NULL)returnfalse;

LinkNode*del=p->next;

p->next=del->next;

x=del->data;deletedel;

returntrue;

};

template

voidLinkList:

:

output()

{LinkNode*p=first->next;inti=1;

while(p!

=NULL)

{cout<<"第"<

"<data<

p=p->next;

i++;

}

};

template

voidLinkList:

:

input(inti)

{

LinkNode*newNode,*last;Tval;

makeEmpty();last=first;

for(intj=1;j<=i;j++)

{cout<<"请输入第"<

"<

cin>>val;

newNode=newLinkNode(val);

last->next=newNode;

last=newNode;

}

};

template

LinkNode*LinkList:

:

max()

{LinkNode*max,*p;

p=first;max=p;

while(p->next!

=NULL)

{p=p->next;

if(max->data<=p->data)

{max=p;}

}

returnmax;

};

template

voidLinkList:

:

create(T*a,intn)

{intj;

LinkNode*newNode,*last;

makeEmpty();last=first;

/*cout<<"请输入数组的个数"<

cin>>i;

chara[i];

for(intj=1;j<=i;j++)

{cout<<"请输入第"<

"<

cin>>val;

a[j-1]=val;

}*/

for(j=1;j<=n;j++)

{newNode=newLinkNode(a[j-1]);

last->next=newNode;

last=newNode;

}

cout<<"创建成功!

"<

};

/*template

voidLinkList:

:

tidyup()

{LinkNode*newNode,*p,*del;

newNode=first->next;p=newNode->next;

while(p!

=NULL)

{if(newNode->data=p->data)

del=p->next;

p->next=del->next;

deletedel;

p=p->next;}*/

2、#include//LinkList.cpp

#include"LinkList.h"

intmain()

{inta,i;LinkListnewlist;charm;chard[5]={'a','b','c','d','e'};

while(a)

{cout<<"========================================="<

cout<<"单链表"<

cout<<"

(1)输入单链表数据"<

cout<<"

(2)显示单链表数据"<

cout<<"(3)定位"<

cout<<"(4)最大值"<

cout<<"(5)统计"<

cout<<"(6)插入"<

cout<<"(7)清空单链表"<

cout<<"(8)数组创建单链表"<

cout<<"(9)删除"<

cout<<"PS:

1、必须先输入数据才能进行其他操作"<

cout<<"2、只读取输入的第一个字符"<

cout<<"========================================="<

cin>>a;

switch(a)

{case1:

cout<<"请输入表中元素的个数:

"<

cin>>i;

newlist.input(i);break;

case2:

if(newlist.Length()==0)cout<<"表为空,返回主菜单输入"<

elsenewlist.output();break;

case3:

loop1:

cout<<"请输入要查找的位置:

"<

cin>>i;

if(newlist.Locate(i)!

=NULL)

{cout<<"第"<data<

elsecout<<"您输入的位置有误!

"<

case4:

if(newlist.Length()==0)cout<<"表为空,返回主菜单输入"<

elsecout<<"最大值是"<data<

case5:

if(newlist.Length()==0)cout<<"表为空,返回主菜单输入"<

else{cout<<"输入要统计的值"<

cin>>m;

cout<<"共有";cout<

case6:

if(newlist.Length()==0)cout<<"表为空,返回主菜单输入"<

else{loop:

cout<<"请输入要插入的位置:

"<

cin>>i;

cout<<"请输入要插入的数据:

"<

cin>>m;

while(!

newlist.Insert(i,m))

{cout<<"插入失败请重新插入:

"<

cout<<"插入成功!

"<

case7:

newlist.makeEmpty();cout<<"清空成功!

"<

case8:

newlist.create(d,5);break;

case9:

if(newlist.Length()==0)cout<<"表为空,返回主菜单输入"<

else{cout<<"输入要删除的位置:

"<

cin>>i;

if(newlist.Remove(i,m))cout<<"删除成功!

"<

case0:

break;

default:

cout<<"没有该选项"<

}

return0;}

五、调试分析

1、出现了链表的位置,和预定的位置有误,再分析流程之后,修改了几个参数后,得到解决。

2、修复了未输入链表,直接进行其他操作出现的BUG。

3、测试结果

列出几组输入和输出结果,输入集应多于需求分析的数据。

可以输入一组数:

1,2,3,a,b,c

显示:

定位操作:

求最大值:

统计元素

在第四个位置插入a

显示

用数组A[5]={‘a’‘b’‘c’‘d’‘e’}创建链表:

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

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

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

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