数据结构顺序表.docx

上传人:b****4 文档编号:4403387 上传时间:2022-12-01 格式:DOCX 页数:13 大小:131.38KB
下载 相关 举报
数据结构顺序表.docx_第1页
第1页 / 共13页
数据结构顺序表.docx_第2页
第2页 / 共13页
数据结构顺序表.docx_第3页
第3页 / 共13页
数据结构顺序表.docx_第4页
第4页 / 共13页
数据结构顺序表.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

数据结构顺序表.docx

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

数据结构顺序表.docx

数据结构顺序表

实验1顺序表的操作

一、实验要求

1.输入一组整型元素序列,建立顺序表。

2.实现该顺序表的遍历。

3.在该顺序表中进行顺序查找某一元素,查找成功返回1,否则返回0。

4.判断该顺序表中元素是否对称,对称返回1,否则返回0。

5.实现把该表中所有奇数排在偶数之前,即表的前面为奇数,后面为偶数。

6.*输入整型元素序列利用有序表插入算法建立一个有序表。

7.*利用算法6建立两个非递减有序表并把它们合并成一个非递减有序表。

8.编写一个主函数,调试上述算法。

9.*综合训练:

利用顺序表实现一个班级学生信息管理(数据录入、插入、删除、排序、查找等)

二、源代码

#include"stdio.h"

#include"stdlib.h"

#defineMAXSIZE100//表中元素的最大个数

typedefintElemType;//元素类型

typedefstructlist

{

ElemTypeelem[MAXSIZE];//静态线性表

intlength;//表的实际长度

}SqList;//顺序表的类型名

voidcreSqList(SqList&list)//1.建立顺序表

{

intn,i;

intx;

printf("n=");

scanf("%d",&n);

for(i=0;i

{

printf("No%d=",i+1);

scanf("%d",&x);

list.elem[i]=x;

}

list.length=n;

}

voidtraverse(SqListabc)//2.表的遍历

{

for(inti=0;i

{

printf("%d",abc.elem[i]);

}

}

voidFind(SqListabc)//3.表中元素查找

{

inta,m=0,i=0;

printf("请输入需要查找的数据:

");

scanf("%d",&a);

while(i

{

if(abc.elem[i]==a)//判断元素是否与输入值相等

{

m=1;

break;//相等则跳出循环

}

else

{

m=0;

}

i++;

}

printf("第三题答案是:

%d\n\n\n",m);

}

voidsymmetry(SqListabc)//4.判断表是否为对称表,若是返回1,否则为0;

//首先应考虑元素总数的个数。

奇数时先找到中间元素,然后再比较其余元素是否一样。

若为偶数,则直接头尾比较

{

inti=0,count=0,m=0,n=0;

intlen1,len2;

int*str1,*str2;

for(;i

{

count++;

}

//printf("count=%d\n",count);

if(abc.length%2==0)//数组元素总数为偶数个

{

len1=count/2;

len2=count/2;

str1=(int*)malloc(len1*sizeof(int));

str2=(int*)malloc(len2*sizeof(int));//两个可变数组

for(i=0;i

{

if(i<=count/2-1)//从中间分开

{

str1[i]=abc.elem[i];

//printf("str1[%d]=%d\n",i,str1[i]);

}

else

{

//printf("abc.elem[%d]=%d\n",i,abc.elem[i]);

str2[m]=abc.elem[i];

//printf("str2[%d]=%d\n",m,str2[m]);

m++;

}

}

for(i=0;i

{

if(str1[i]==str2[abc.length/2-i-1])

n=1;

else

n=0;

}

printf("第四题答案是:

%d\n",n);

printf("\n\n\n");

}

else//个数为奇数的时候

{

len1=count/2-1;

len2=count/2+1;

str1=(int*)malloc(len1*sizeof(int));

str2=(int*)malloc(len2*sizeof(int));

for(inti=0;i

{

if(i<=count/2-1)

{

str1[i]=abc.elem[i];

//printf("str1[%d]=%d\n",i,str1[i]);

}

else

{

str2[m]=abc.elem[i+1];

if(i+1==abc.length)

str2[m]=0;

//printf("str2[%d]=%d\n",m,str2[m]);

m++;

}

}

for(i=0;i

{

if(str1[i]==str2[abc.length/2-i-1])

n=1;

else

n=0;

}

printf("第四题的答案是:

%d\n",n);

}

}

voidjiou(SqListabc)//5.

{

int*p,*q,temp;

p=&abc.elem[0];

q=&abc.elem[abc.length-1];

while(p

{

if(*p%2!

=0)//偶数

{

p++;

continue;

}

if(*q%2==0)

{

q--;

continue;

}

temp=*p;

*p=*q;

*q=temp;

}

printf("调整之后为:

\n");

for(inti=0;i

{

printf("%d\t",abc.elem[i]);

}

printf("\n");

}

voidInsert(SqLista)//6.因为上一步奇偶排序后有序表变为了无序表。

故先做排序。

采用冒泡排序方法

{

inti,j,k,n;

for(i=0;i<=a.length-1;i++)

{

if(a.elem[i]>a.elem[i+1])

{

if(i+1

{

j=a.elem[i+1];

a.elem[i+1]=a.elem[i];

a.elem[i]=j;

}

else

a.elem[i]=a.elem[i];

}

//printf("%d\t",a.elem[i]);

}//排序完成

printf("请输入要添加的数据:

");

scanf("%d",&k);

for(i=0;i

{

if(a.elem[i]>k)

{

n=i;

//printf("====%d======\n",n);

break;

}

}

for(j=a.length;j>=n;j--)

{

a.elem[j]=a.elem[j-1];

if(j==n)

{

a.elem[j]=k;

a.length++;

}

}

for(i=0;i<=a.length-1;i++)

{

printf("%d\t",a.elem[i]);

}

printf("\n");

}

intmain()

{

SqListmyList;

inti,n,x,a,flag=0,k;

while

(1)

{

printf("****************************************************\n");

printf("\t1建立顺序表\n");

printf("\t2表的遍历\n");

printf("\t3在该顺序表中进行顺序查找某一元素,查找成功返回1,否则返回0。

\n");

printf("\t4判断该顺序表中元素是否对称,对称返回1,否则返回0。

\n");

printf("\t5实现把该表中所有奇数排在偶数之前,即表的前面为奇数,后面为偶数\n");

printf("\t6*输入整型元素序列利用有序表插入算法建立一个有序表。

\n");

//printf("\t7*利用算法6建立两个非递减有序表并把它们合并成一个非递减有序表\n");

//printf("\t8*综合训练:

利用顺序表实现一个班级学生信息管理(数据录入、插入、删除、排序、查找等)\n");

printf("\t0退出菜单!

\n");

printf("****************************************************\n");

printf("请选择:

");

scanf("%d",&a);

switch(a)

{

case0:

return0;

case1:

//建立顺序表

creSqList(myList);

flag=1;

break;

case2:

//表的遍历

system("cls");

if(flag==0)

{

printf("先建立顺序表!

\n");

break;

}

printf("您刚才总共输入了%d个元素,它们分别是:

\n\n\n",myList.length);

traverse(myList);

break;

case3:

//在该顺序表中进行顺序查找某一元素,查找成功返回1,否则返回0。

system("cls");

if(flag==0)

{

printf("先建立顺序表!

\n");

break;

}

Find(myList);

break;

case4:

//判断该顺序表中元素是否对称,对称返回1,否则返回0。

system("cls");

if(flag==0)

{

printf("先建立顺序表!

\n");

symmetry(myList);

break;

case5:

//实现把该表中所有奇数排在偶数之前,即表的前面为奇数,后面为偶数

system("cls");

if(flag==0)

{

printf("先建立顺序表!

\n");

break;

}

Insert(myList);

break;

case6:

system("cls");

if(flag==0)

{

printf("先建立顺序表!

\n");

break;

}

Insert(myList);

break;

default:

printf("请输入合法数字!

\n");

}

}

}

}

三、运行结果

a)程序主界面:

 

b)选择1建立顺序表:

c)选择2输出线性表的长度及内容:

d)选择3查找数据。

表内含有则输出1,否则为0:

e)选择4,判断是否为对称表。

若是输出1,否则输出0:

f)选择5,排序。

将奇数排在偶数之前:

g)选择6,插入一个新数据:

h)选择0,退出:

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

当前位置:首页 > 解决方案 > 学习计划

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

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