顺序表.docx
- 文档编号:2174378
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:23
- 大小:29KB
顺序表.docx
《顺序表.docx》由会员分享,可在线阅读,更多相关《顺序表.docx(23页珍藏版)》请在冰点文库上搜索。
顺序表
肇庆学院计算机科学系
实验报告
专业:
电子商务班级:
科技2班姓名:
学号:
课程名称:
顺序表
学年2012--2012学期1□/2□课程类别专业必修□限选□任选□实践□
●实验内容:
实验时间:
2012年3月28日
1.编写函数,输入一组整型元素序列,建立一个顺序表。
2.编写函数,实现对该顺序表的遍历。
3.编写函数,在顺序表中进行顺序查找某一元素,查找成功则返回其存储位置i,否则返回错误信息。
4.编写函数,实现在顺序表的第i个位置上插入一个元素x的算法。
5.编写函数,实现删除顺序表中第i个元素的算法。
6.编写利用有序表插入算法建立一个有序表的函数。
7.编写函数,利用以上算法,建立两个非递减有序表,并把它们合并成一个非递减有序表。
8.编写函数,实现输入一个元素x,把它插入到有序表中,使顺序表依然有序。
9.编写一个主函数,在主函数中设计一个简单的菜单,分别调试上述算法。
●实验目的及要求:
1.掌握顺序表的存储结构形式及其描述
2.掌握顺序表的建立、查找、插入和删除操作
●实验内容、方法与步骤:
(使用附页填写并附在本页后)
●实验结果:
1.建立顺序表
2.对该顺序表遍历
3.插入
4.删除
5.查找
6.建立有序表
7.合并有序表
8.插入排序
9.退出
请输入操作序号:
请选择(1~8)
1
请输入一组整形数据的个数:
3
请输入数据:
123
请选择(1~8):
2
123
请选择(1~8):
3
请输入要查找的数x:
1
其储存序号为:
1
请选择(1~8):
4
请输入位置i和插入的数x:
1,3
3123
请选择(1~8):
5
请输入要删除的元素位置i:
2
323
请选择(1~8):
6
请输入有序表的长度:
3
请输入数据:
245
245
请选择(1~8):
7
请输入A组整形数据的个数:
2
请输入数据:
23
请输入B组整形数据的个数:
2
请输入数据:
31
1233
请选择(1~8):
8
请输入这个有序表的长度:
3
请输入数据:
235
请输入要输入的整数x:
1
1235
请输入(1~8):
9
谢谢使用!
●小结:
1.插入、删除时元素的移动原因、方向及先后顺序。
2.理解不同的函数形参与实参的传递关系。
分数:
批阅老师:
200年月日
肇庆学院计算机科学系
实验报告(附页)
#include
#include
#defineMAXSIZE100
typedefintdatatype;
typedefstruct
{
datatypedata[MAXSIZE];
intlast;
}SeqList;
SeqList*L;
SeqList*A;
SeqList*B;
SeqList*C;
SeqList*Init_SeqList();
SeqList*list(SeqList*L);
intLocation_SeqList(SeqList*L,datatypex);
intInsert_SeqList(SeqList*L,inti,datatypex);
intDelete_SeqList(SeqList*L,inti);
SeqList*Order_SeqList(void);
voidmerge(SeqList*A,SeqList*B,SeqList*C);
SeqList*Order_SeqList2();
voidmenu()
{printf("1.建立顺序表\n");
printf("2.对该顺序表遍历\n");
printf("3.插入\n");
printf("4.删除\n");
printf("5.查找\n");
printf("6.建立有序表\n");
printf("7.合并有序表\n");
printf("8.插入排序\n");
printf("9.退出\n\n");
printf("请输入操作序号:
");
}
SeqList*Init_SeqList()
{
SeqList*L;
L=(SeqList*)malloc(sizeof(SeqList));
L->last=-1;
returnL;
}
SeqList*List(SeqList*L)
{
inti=0;
for(i=0;i<=L->last;i++)
printf("%d",L->data[i]);
printf("\n");
returnL;
}
intLocation_SeqList(SeqList*L,datatypex)
{
inti=0;
while(i<=L->last&&L->data[i]!
=x)
i++;
if(i>L->last)
printf("不好意思,没有相应的值,请重新输入\n");
else
printf("其存储序号为:
%d",i+1);
printf("\n");
return0;
}
intInsert_SeqList(SeqList*L,inti,datatypex)
{
intj;
if(L->last==MAXSIZE-1)
{
//printf("表满\n");
return(-1);}
if(i<1||i>L->last+2)
{
printf("位置错\n");
return(0);}
for(j=L->last;j>=i-1;j--)
L->data[j+1]=L->data[j];
L->data[i-1]=x;
L->last++;
return1;
}
intDelete_SeqList(SeqList*L,inti)
{
intj;
if(i<1||i>L->last+1)
{printf("不存在第i个元素\n");
return(0);}
for(j=i;j<=L->last;j++)
L->data[j-1]=L->data[j];
L->last--;
return1;
}
SeqList*Order_SeqList()
{
inti=0,j,g,length;
SeqList*L;
L=Init_SeqList();
printf("请输入有序表的长度:
");
scanf("%d",&length);
L->last=length-1;
printf("请输入数据:
\n");
for(i=0;i<=L->last;i++)
scanf("%d",&L->data[i]);
for(i=0;i
{for(j=0;j
if(L->data[j]>L->data[j+1])
{
g=L->data[j+1];
L->data[j+1]=L->data[j];
L->data[j]=g;
}
}
for(i=0;i<=L->last;i++)
printf("%d",L->data[i]);
printf("\n");
returnL;
}
voidmerge(SeqList*A,SeqList*B,SeqList*C)
{
inta,b,c,d,i,j,k;
C=(SeqList*)malloc(sizeof(SeqList));
C->last=-1;
A=(SeqList*)malloc(sizeof(SeqList));
A->last=-1;
printf("请输入A组整形数据的个数:
\n");
scanf("%d",&a);
A->last=a-1;
printf("请输入数据:
\n");
for(i=0;i<=A->last;i++)
scanf("%d",&A->data[i]);
for(i=0;i
for(j=0;j
if(A->data[j]>A->data[j+1])
{
c=A->data[j+1];
A->data[j+1]=A->data[j];
A->data[j]=c;
}
B=(SeqList*)malloc(sizeof(SeqList));
B->last=-1;
printf("请输入B组整形数据的个数:
\n");
scanf("%d",&b);
B->last=b-1;
printf("请输入数据:
\n");
for(j=0;j<=B->last;j++)
scanf("%d",&B->data[j]);
for(i=0;i
for(j=0;j
if(B->data[j]>B->data[j+1])
{
d=B->data[j+1];
B->data[j+1]=B->data[j];
B->data[j]=d;
}
C->last=a+b-1;
i=0;j=0;k=0;
while(i<=A->last&&j<=B->last)
{
if(A->data[i]
C->data[k++]=A->data[i++];
else
C->data[k++]=B->data[j++];
}
while(i<=A->last)
C->data[k++]=A->data[i++];
while(j<=B->last)
C->data[k++]=B->data[j++];
k=a+b-1;
C->last=k;
for(k=0;k<=C->last;k++)
printf("%d",C->data[k]);
printf("\n");
}
SeqList*Order_SeqList2()
{
intg,length,i,j,k=0,x;
SeqList*L;
L=Init_SeqList();
printf("请输入这个有序表的长度:
");
scanf("%d",&length);
L->last=length-1;
printf("请输入数据:
\n");
for(i=0;i<=L->last;i++)
scanf("%d",&L->data[i]);
for(i=0;i
{for(j=0;j
if(L->data[j]>L->data[j+1])
{
g=L->data[j+1];
L->data[j+1]=L->data[j];
L->data[j]=g;
}
}
printf("请输入要输入的整数x:
");
scanf("%d",&x);
for(i=0;i<=L->last;i++)
{
if(x>L->data[i])
k++;
}
for(j=L->last;j>=k;j--)
L->data[j+1]=L->data[j];
L->data[k]=x;
L->last++;
for(i=0;i<=L->last;i++)
printf("%d",L->data[i]);
printf("\n");
return0;
}
intmain()
{
inta;
SeqList*L;
menu();
while
(1)
{
printf("请选择(1~8):
\n");
scanf("%d",&a);
switch(a)
{
case1:
{inti,b;
L=Init_SeqList();
printf("请输入一组整形数据的个数:
\n");
scanf("%d",&b);
L->last=b-1;
printf("请输入数据:
\n");
for(i=0;i<=L->last;i++)
scanf("%d",&L->data[i]);break;}
case2:
L=List(L);
break;
case3:
{
intc,x;
printf("请输入要查找的值x:
");
scanf("%d",&x);
c=Location_SeqList(L,x);}
break;
case4:
{
inti,x,success;
printf("请输入位置i和插入的数x:
\n");
scanf("%d,%d",&i,&x);
success=Insert_SeqList(L,i,x);
if(success==1)
{
for(i=0;i<=L->last;i++)
{
printf("%5d",L->data[i]);
}
printf("\n");
}
break;}
case5:
{
inti,success;;
printf("请输入要删除的元素的位置i:
\n");
scanf("%d",&i);
success=Delete_SeqList(L,i);
if(success==1)
{
for(i=0;i<=L->last;i++)
printf("%5d",L->data[i]);
printf("\n");
}
break;}
case6:
L=Order_SeqList();break;
case7:
merge(A,B,C);break;
case8:
L=Order_SeqList2();break;
default:
printf("谢谢使用");return0;
}
}
return(0);
}
分数:
批阅老师:
200年月日
肇庆学院计算机科学系
实验报告
专业:
电子商务班级:
科技2班姓名:
许雪芳学号:
201124131242
课程名称:
顺序表
学年2012--2012学期1□/2□课程类别专业必修□限选□任选□实践□
●实验内容:
实验时间:
2012年3月28日
1.编写函数,实现随机产生或键盘输入一组元素,建立一个带头结点的单链表(无序)。
2.编写函数,实现遍历单链表。
3.编写函数,实现把单向链表中元素逆置(不允许申请新的结点空间)。
4.编写函数,建立一个非递减有序单链表。
5.编写函数,利用以上算法,建立两个非递减有序单链表,然后合并成一个非递减链表。
6.编写函数,在非递减有序单链表中插入一个元素使链表仍然有序。
7.编写函数,实现在非递减有序链表中删除值为x的结点。
8.编写一个主函数,在主函数中设计一个简单的菜单,分别调试上述算法。
●实验目的及要求:
1.掌握单链表的存储结构形式及其描述
2.掌握单链表的建立、查找、插入和删除操作
●实验内容、方法与步骤:
(使用附页填写并附在本页后)
●实验结果:
1.随机输入一组元素,建立无序的单链表,以0结束\n");
2.以输出的形式对该单链表遍历
3.把单链表中元素逆置
4.建立一个非递减有序单链表
5.建立两个非递减有序单链表,然后合并成一个非递减链表
6.在非递减有序单链表中插入一个元素
7.删除指定的元素
请选择:
1
1420
请选择:
2
142
请选择:
3
241
请选择:
4
建立有序表,输入任意个整形数据以0结束:
3140
134
请选择:
5
建立有序表,输入任意个整形数据以0结束:
1420
建立有序表,输入任意个整形数据以0结束:
240
12244
请选择:
6
建立有序表,输入任意个整形数据以0结束:
25160
1256
请选择要插入的元素x:
4
12456
请选择:
7
建立有序表,输入任意个整形数据以0结束:
14250
1245
请输入要删除的元素x:
5
124
●小结:
1.重点理解链式存储的特点及指针的含义。
2.注意比较顺序存储与链式存储的各自特点。
3.注意比较带头结点、无头结点链表实现插入、删除算法时的区别。
4.单向链表的操作是数据结构的基础,一定要注意对这部分的常见算法的理解。
分数:
批阅老师:
200年月日
肇庆学院计算机科学系
实验报告(附页)
#include
#include
typedefintElemType;
typedefstructLNode
{
ElemTypedata;
structLNode*next;
}LNode,*Linklist;
{Linklistp,s;
ElemTypex;
L=(Linklist)malloc(sizeof(LNode)
L->next=NULL;
p=L;
scanf("%d",&x);
while(x){
s=(Linklist)malloc(sizeof(LNode));
s->data=x;
s->next=NULL;
p=s;
scanf("%d",&x);}
}
voidprintlist(Linklist&L)
{Linklistp;
p=L;
while(p->next!
=NULL){
p=p->next;
printf("%d",p->data);}
printf("\n");
}
voidnizhi(Linklist*L)
{
Linklistp,s;
p=L->next;
L->next=NULL;
while(p)
{
s=p;
p=p->next;
s->next=L->next;
L->next=s;}
}
voidInsert(Linklist*L,ElemTypex)
{Linklistp,s;
s=(Linklist)malloc(sizeof(LNode));
s->data=x;
p=L;
while(p->next&&p->next->data<=x)
p=p->next;
p->next=s;
}
voidCreat(Linklist*L)
{ElemTypex;
L=(Linklist)malloc(sizeof(LNode));
L->next=NULL;
printf("建立有序表,输入任意个整形数据以0结束:
\n");
scanf("%d",&x);
while(x){
Insert(L,x);
scanf("%d",&x);}
}
voidmerger(LinklistLa,LinklistLb,LinklistLc)
{Linklistp,q,s,rear;
p=La->next;
q=Lb->next;
Lc=rear=La;
free(Lb);
while(p&&q){
if(p->data
else{s=q;q=q->next;}
rear->next=s;
rear=rear->next;}
if(p)rear->next=p;elserear->next=q;
}
voidDelete(Linklist*L,ElemTypex)
{Linklistp,q;
p=L;
q=L->next;
while(q&&q->data!
=x){
p=q;
q=q->next;}
if(!
q)printf("\nnotdeleted");
else{p->next=q->next;free(q);}
}
voidmain()
{LinklistLa,Lb,Lc;
ElemTypex;
intn;
printf("1.随机输入一组元素,建立无序的单链表,以0结束\n");
printf("2.以输出的形式对该单链表遍历\n");
printf("3.把单链表中元素逆置\n");
printf("4.建立一个非递减有序单链表\n");
printf("5.建立两个非递减有序单链表,然后合并成一个非递减链表\n");
printf("6.在非递减有序单链表中插入一个元素\n");
printf("7.删除指定的元素\n");
while
(1)
{printf("请选择");
scanf("%d",&n);
switch(n)
{case1:
Creatlist(La);break;
case2:
printlist(La);break;
case3:
nizhi(La);printlist(La);break;
case4:
Creat_Sort(La);
printlist(La);break;
case5:
Creat_Sort(La);
Creat_Sort(Lb);
merger(La,Lb,Lc);
printlist(Lc);break;
case6:
Creat_Sort(La);
printlist(La);
printf("请输入要插入的元素x:
");
scanf("%d",&x);
Insert(La,x);
printlist(La);break;
case7:
Creat_Sort(La);
printlist(La);
printf("请输入要删除的元素x\n");
scanf("%d",&x);
Delete(La,x);
printlist(La);break;
default:
printf("输入有误,请重新选择!
\n");
}}
}
分数:
批阅老师:
200年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 顺序
![提示](https://static.bingdoc.com/images/bang_tan.gif)