数据结构实验 顺序表

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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(ilast&&jlast)

{

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;

相关文档
最新文档