顺序表的实现Word文件下载.docx
《顺序表的实现Word文件下载.docx》由会员分享,可在线阅读,更多相关《顺序表的实现Word文件下载.docx(15页珍藏版)》请在冰点文库上搜索。
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<
iostream>
//SeqList.h
usingnamespacestd;
template<
classT>
classSeqList
{
protected:
T*data;
intmax_size;
intlenth;
public:
SeqList(intn);
~SeqList(){delete[]data;
}
intLength()const{returnlenth;
voidInsert(inti);
voidEmpty(){inti;
for(i=0;
i<
=lenth-1;
i++)data[i]=NULL;
lenth=0;
cout<
<
"
顺序表已经清空"
endl;
};
boolIsempty(){if(Length())returnfalse;
elsereturntrue;
voidinput();
voidoutput();
voidIncreaseSize();
//扩容函数
x);
//按位置删除
intRemove2(inti);
//按元素删除
template<
SeqList<
T>
:
SeqList(inti)
{
max_size=i;
lenth=0;
data=newT[max_size];
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;
Search()
{inta=0,b,c;
charx;
(1)请输入要查找的元素"
(2)请输入要查找的位置"
cin>
>
b;
switch(b)
case1:
cin>
x;
for(c=0;
c<
c++)
{if(data[c]==x){a++;
第"
c+1<
个元素是"
x<
}}
if(a!
=0)cout<
共找到"
a<
个元素"
elsecout<
不存在该元素!
break;
case2:
a;
if(a>
=1||a<
=lenth)cout<
该元素是:
data[a-1]<
输入的位置不正确!
/*template<
intSeqList<
Locate(inti)const
{if(i>
=1&
&
=lenth)returni;
elsereturn0;
*/
Insert(inti)
{charx;
if(lenth==max_size)IncreaseSize();
loop:
if(i<
0||i>
lenth)
cout<
输入的范围错误!
必须在1~"
lenth<
之间。
请重新输入位置:
i;
gotoloop;
}
请输入要插入的元素:
for(intj=lenth;
j>
=i;
j--)
{data[j]=data[j-1];
data[i-1]=x;
lenth++;
input()
while
(1)
{cout<
请输入顺序表中的元素个数:
;
lenth;
if(lenth<
=max_size){cout<
请输入"
表元素个数输入有误,范围不能超过"
max_size<
!
for(inti=0;
i++)
{cout<
请输入第"
i+1<
data[i];
output()
{for(inti=0;
个元素:
data[i]<
}};
Remove1(T&
{inta=0,i;
if(data[i]==x)
{a++;
for(intj=i;
j<
lenth+1;
j++){data[j]=data[j+1];
lenth-=1;
已经删除第"
if(a!
=0)return1;
if(a==0)cout<
删除值有错误,请重新输入"
return0;
Remove2(inti)
{
charx;
x=data[i-1];
for(intj=i;
lenth-=1;
//主函数
stdlib.h>
#include"
SeqList.h"
intmain()
inta,i,c,d;
char>
newlist(10);
while(a)
========================================="
顺序表"
(1)输入顺序表"
(2)显示顺序表"
(3)进行插入操作"
(4)进行删除操作"
(5)查找顺序表中的元素"
(6)清空顺序表"
(0)退出程序"
switch(a)
{case1:
newlist.input();
case2:
if(newlist.Isempty())cout<
顺序表为空,返回主菜单输入"
elsenewlist.output();
case3:
请输入要插入的位置:
newlist.Insert(i);
插入成功"
case4:
(1)请输入要删除的元素"
(2)请输入要删除的位置"
cin>
c;
if(c=1)
{cout<
cin>
while(newlist.Remove1(x)!
=1)
{cin>
}
elsecout<
d;
newlist.Remove2(d);
break;
case5:
newlist.Search();
case6:
newlist.Empty();
case0:
default:
没有该选项"
return0;
五、调试分析
1、出现了几次顺序表的容量满,无法处理,于是使用了扩容函数。
2、解决了删除和查找操作中位置和地址的兼容问题。
3、解决了顺序表元素的类型兼容问题
六、测试结果
列出几组输入和输出结果,输入集应多于需求分析的数据。
纯数字输入:
纯字母输入:
字母数字混合输入:
插入操作:
查找操作: