数据结构实验 顺序表
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
信息学院
数据结构实验报告
学号:姓名:班级:
课程名称:数据结构实验名称:编写一个程序,实现对顺序表的如下操作:
1)初始化
2)创建一个顺序表(表长度至少为10)3)输出所创建的顺序表
4)键盘输入插入位置和插入元素,完成对表中插入元素的运算
5)键盘输入删除位置,实现对删除算法的调用,并输出被删除元素的值
6)创建两张有序表,实现这两张有序表的合并,并输出合并后的有序表。
实验性质:√①综合性实验②设计性实验③验证性实验实验时间:试验地点:机房
本实验所用设备:pc及C++6.0
【数据结构】:
#define Maxsize 100
typedef int ElemType;
typedef struct
{ElemType elem[Maxsize];
int last;
}SqeList;//建立顺序表;
【算法思想】:
通过基本算法熟悉数据结构。
创建表,运用增删改查实现表的操作后,
合并两表。
【算法描述】:
void InitList(SqeList *L){printf("表已初始化!\n");L->last=-1;}
void CreateForm(SqeList *L1){
InitList(L1);
int i,n;
printf("请输入要建表中的数组元素的个数,且不超过100:\n"); scanf("%d",&n);
printf("你将输入的元素:\n");
for(i=0;i { L1->last++; scanf("%5d",&L1->elem[i]); } }//CreateForm()函数的功能为建立一个线性表。 int Empty(SqeList *L1){ if(L1->last==-1){printf("表为空!");return 1;} else { printf("表不为空");return 0; } }//Empty()函数判断表是否为空 void Intsert(SqeList *L1,int i,ElemType e)//在顺序表中插入新元素。{ if(Empty(L1))printf("表已满,不可插入!\n"); else { printf("请输入插入的位置\n");scanf("%5d",&i); if(i<1||i>L1->last+2)printf("插入非法操作!\n"); else { printf("请输入插入元素:"); scanf("%5d",&e); int a; a=L1->last+1; for(;i<=a;a--) L1->elem[a]=L1->elem[a-1]; L1->elem[i-1]=e; L1->last++; } } } void show(SqeList L)//show()显示顺序表; { int i=0; printf("你的当前最新表元素是:\n"); for(;i<=st;i++) printf("%5d",L.elem[i]); printf("\n"); } void FormClassify(SqeList *L)//FormClassify()函数顺序表排序,按升序方式; { int i,j; for(i=0;i<=L->last;i++) { int temp; for(j=L->last;i { if(L->elem[i]>=L->elem[j]){ temp=L->elem[i]; L->elem[i]=L->elem[j]; L->elem[j]=temp; } } } } int DeletSeqList(SqeList *L,int c,ElemType *e)//删除数据表中的某个元素,删除成功则返回1并返回删除元素值,否则返回0; { printf("请输入表的删除位置:"); scanf("%5d",&c); if(L->last==-1){printf("空表无法删除!");return 0;} else if(c<1||c>L->last+1){printf("非法删除!"); return 0;} else { int b; b=L->last; *e=L->elem[c-1]; for(;c<=b;c++) L->elem[c-1]=L->elem[c]; L->last--; } printf("你删除的元素是%5d\n",*e); return 1; } void Combine_SeqList(SqeList *L1,SqeList *L2,SqeList *L3)//合并两个表,并排序{ int i=0,j=0,k=0; while(i { if(L1->elem[i]>=L2->elem[j]){ L3->elem[k]=L2->elem[j]; j++;k++; } else{ L3->elem[k]=L1->elem[i]; i++;k++; } } while(i<=L1->last){ L3->elem[k]=L1->elem[i];i++;k++; } while(j<=L2->last){ L3->elem[k]=L2->elem[j];j++;k++; } L3->last=L1->last+L2->last+1; } int main() { printf("为了对比,表二的删除后的第二次输出以升序方式输出:\n"); SqeList *L1,*L3,*L5; SqeList L2,L4,L6; L1=&L2; int c,v,m,mm; ElemType g,y,z1,z2; ElemType *z,*zz;