顺序表的实现.docx

上传人:b****5 文档编号:12364076 上传时间:2023-04-18 格式:DOCX 页数:15 大小:127.69KB
下载 相关 举报
顺序表的实现.docx_第1页
第1页 / 共15页
顺序表的实现.docx_第2页
第2页 / 共15页
顺序表的实现.docx_第3页
第3页 / 共15页
顺序表的实现.docx_第4页
第4页 / 共15页
顺序表的实现.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

顺序表的实现.docx

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

顺序表的实现.docx

顺序表的实现

实验二:

顺序表的实现

班级电信081学号0808140512姓名王智杰

一、问题描述

实现顺序表的顺序存储和插入、删除、查找、遍历、清空等操作

二、需求分析

1、简述程序的基本功能

构造、析构、插入、删除、取值、赋值

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

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

3、输出的形式

选1:

选2(没有输入顺序表或顺序表被清空的情况):

选择3:

选择4:

选择5:

选择6:

选择0:

退出;

4、测试数据要求

可以输入一组数:

1,2,3,a,b,c,d,5,6。

显示:

三、概要设计

1、抽象数据类型

templateclassSeqList

intLength()const

voidSearch();

voidInsert(inti);

voidEmpty()

boolIsempty()

voidinput()

voidoutput()

voidIncreaseSize()

intRemove1(T&x)

intRemove2(inti)

2、主程序流程及模块调用关系

SeqList

-dataT*

-max_sizeint

-lenthint

+Length()int

+Search()void

+Insert(inti)void

+Empty()void

+Isempty()bool

+input()void

+output()void

+IncreaseSize()void

+Remove1(T&x)int

+Remove2(inti)int

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

#include//SeqList.h

usingnamespacestd;

template

classSeqList

{

protected:

T*data;

intmax_size;

intlenth;

public:

SeqList(intn);

~SeqList(){delete[]data;}

intLength()const{returnlenth;}

voidSearch();

voidInsert(inti);

voidEmpty(){inti;for(i=0;i<=lenth-1;i++)data[i]=NULL;lenth=0;cout<<"顺序表已经清空"<

boolIsempty(){if(Length())returnfalse;elsereturntrue;}

voidinput();

voidoutput();

voidIncreaseSize();//扩容函数

intRemove1(T&x);//按位置删除

intRemove2(inti);//按元素删除

};

template

SeqList:

:

SeqList(inti)

{

max_size=i;

lenth=0;

data=newT[max_size];

}

template

voidSeqList:

:

IncreaseSize()

{

T*newarray=newT[max_size+10];

intn=lenth;

T*srcptr=data;

T*destptr=newarray;

while(n--)*destptr++=*srcptr++;

delete[]data;

data=newarray;max_size+=10;

};

template

voidSeqList:

:

Search()

{inta=0,b,c;charx;

cout<<"

(1)请输入要查找的元素"<

cout<<"

(2)请输入要查找的位置"<

cin>>b;

switch(b)

{

case1:

cout<<"

(1)请输入要查找的元素"<

cin>>x;

for(c=0;c<=lenth-1;c++)

{if(data[c]==x){a++;cout<<"第"<

if(a!

=0)cout<<"共找到"<

elsecout<<"不存在该元素!

"<

case2:

cout<<"

(2)请输入要查找的位置"<

cin>>a;

if(a>=1||a<=lenth)cout<<"该元素是:

"<

elsecout<<"输入的位置不正确!

"<

}

};

/*template

intSeqList:

:

Locate(inti)const

{if(i>=1&&i<=lenth)returni;

elsereturn0;

};*/

template

voidSeqList:

:

Insert(inti)

{charx;

if(lenth==max_size)IncreaseSize();

loop:

if(i<0||i>lenth)

{

cout<<"输入的范围错误!

必须在1~"<

请重新输入位置:

"<

cin>>i;

gotoloop;

}

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

"<

cin>>x;

for(intj=lenth;j>=i;j--)

{data[j]=data[j-1];}

data[i-1]=x;

lenth++;

};

template

voidSeqList:

:

input()

{

while

(1)

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

";

cin>>lenth;

if(lenth<=max_size){cout<<"请输入"<

cout<<"表元素个数输入有误,范围不能超过"<

"<

}

for(inti=0;i<=lenth-1;i++)

{cout<<"请输入第"<

cin>>data[i];}

};

template

voidSeqList:

:

output()

{for(inti=0;i<=lenth-1;i++)

{cout<<"第"<

";

cout<

}};

template

intSeqList:

:

Remove1(T&x)

{inta=0,i;

for(i=0;i

{

if(data[i]==x)

{a++;

for(intj=i;j

lenth-=1;

cout<<"已经删除第"<

}

if(a!

=0)return1;

if(a==0)cout<<"删除值有错误,请重新输入"<

};

template

intSeqList:

:

Remove2(inti)

{

loop:

if(i<0||i>lenth)

{

cout<<"输入的范围错误!

必须在1~"<

请重新输入位置:

"<

cin>>i;

gotoloop;

}

charx;

x=data[i-1];

for(intj=i;j

lenth-=1;

cout<<"已经删除第"<

return0;};

#include//主函数

#include

#include"SeqList.h"

intmain()

{

inta,i,c,d;charx;SeqListnewlist(10);

while(a)

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

cout<<"顺序表"<

cout<<"

(1)输入顺序表"<

cout<<"

(2)显示顺序表"<

cout<<"(3)进行插入操作"<

cout<<"(4)进行删除操作"<

cout<<"(5)查找顺序表中的元素"<

cout<<"(6)清空顺序表"<

cout<<"(0)退出程序"<

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

cin>>a;

switch(a)

{case1:

newlist.input();break;

case2:

if(newlist.Isempty())cout<<"顺序表为空,返回主菜单输入"<

elsenewlist.output();break;

case3:

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

"<

cin>>i;

newlist.Insert(i);

cout<<"插入成功"<

case4:

cout<<"

(1)请输入要删除的元素"<

cout<<"

(2)请输入要删除的位置"<

cin>>c;

if(c=1)

{cout<<"

(1)请输入要删除的元素"<

cin>>x;

while(newlist.Remove1(x)!

=1)

{cin>>x;}

}

elsecout<<"

(2)请输入要删除的位置"<

cin>>d;

newlist.Remove2(d);

break;

case5:

newlist.Search();break;

case6:

newlist.Empty();

case0:

break;

default:

cout<<"没有该选项"<

}

}

return0;

}

五、调试分析

1、出现了几次顺序表的容量满,无法处理,于是使用了扩容函数。

2、解决了删除和查找操作中位置和地址的兼容问题。

3、解决了顺序表元素的类型兼容问题

六、测试结果

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

纯数字输入:

纯字母输入:

字母数字混合输入:

插入操作:

查找操作:

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

当前位置:首页 > 工程科技 > 冶金矿山地质

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

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