数据结构顺序表
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
len1=count/2-1;
len2=count/2+1;
str1=(int*)malloc(len1*sizeof(int));
str2=(int*)malloc(len2*sizeof(int));
for (int i = 0 ; i < count ; i ++ )
{
if (i <= count/2-1 )
7.*利用算法6建立两个非递减有序表并把它们合并成一个非递减有序表。
8.编写一个主函数,调试上述算法。
9.*综合训练:利用顺序表实现一个班级学生信息管理(数据录入、插入、删除、排序、查找等)
二、源代码
#include "stdio.h"
#include "stdlib.h"
#define MAXSIZE 100 //表中元素的最大个数
b)选择1建立顺序表:
c)选择2输出线性表的长度及内容:
d)选择3查找数据。表内含有则输出1,否则为0:
e)选择4,判断是否为对称表。若是输出1,否则输出0:
f)选择5,排序。将奇数排在偶数之前:
g)选择6,插入一个新数据:
h)选择0,退出:
{
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]);
creSqList(myList);
flag=1;
break;
case 2://表的遍历
system("cls");
if(flag==0)
{
printf("先建立顺序表!\n");
break;
}
printf("您刚才总共输入了%d个元素,它们分别是:\n\n\n", myList.length);
traverse(myList);
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 < a.length ;i++)
{
if ( a.elem[i] > k)
break;
case 3://在该顺序表中进行顺序查找某一元素,查找成功返回1,否则返回0。
system("cls");
if(flag==0)
{
printf("先建立顺序表!\n");
break;
}
Find(myList);
break;
case 4://判断该顺序表中元素是否对称,对称返回1,否则返回0。
{
if (abc.elem[i]==a)//判断元素是否与输入值相等
{
m=1;
break;//相等则跳出循环
}
else
{
m=0;
}
i++;
}
printf("第三题答案是:%d\n\n\n",m);
}
void symmetry(SqList abc)//4.判断表是否为对称表,若是返回1,否则为0;
//首先应考虑元素总数的个数。奇数时先找到中间元素,然后再比较其余元素是否一样。若为偶数,则直接头尾比较
printf("\t 1建立顺序表\n");
printf("\t 2表的遍历\n");
printf("\t 3在该顺序表中进行顺序查找某一元素,查找成功返回1,否则返回0。\n");
printf("\t 4判断该顺序表中元素是否对称,对称返回1,否则返回0。\n");
printf("\t 5实现把该表中所有奇数排在偶数之前,即表的前面为奇数,后面为偶数\n");
{
int i , j , k , n ;
for ( i = 0 ; i <= a.length-1 ; i ++ )
{
if ( a.elem [i] > a.elem [i+1] )
{
if ( i+1 < a.length )
{
j=a.elem [i+1];
a.elem [i+1]=a.elem [i];
{
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]);
break;
}
Insert(myList);
break;
case 6:
system("cls");
if(flag==0)
{
printf("先建立顺序表!\n");
break;
}
Insert(myList);
break;
default:
printf("请输入合法数字!\n");
}
}
}
}
三、运行结果
a)程序主界面:
m++;
}
}
for (i = 0 ; i < count / 2 ; 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;
len2=count/2;
str1=(int*)malloc(len1*sizeof(int));
str2=(int*)malloc(len2*sizeof(int));//两个可变数组
for (i=0;i<count;i++)//将元素分配到两个数组中
{
if (i<=count/2-1)//从中间分开
*p=*q;
*q=temp;
}
printf("调整之后为:\n");
for (int i = 0 ; i<abc.length;i++)
{
printf("%d\t",abc.elem[i]);
}
printf("\n");
}
void Insert(SqList a )//6.因为上一步奇偶排序后有序表变为了无序表。故先做排序。采用冒泡排序方法
{
for(int i=0;i<abc.length;i++)
{
printf("%d ", abc.elem[i]);
}பைடு நூலகம்
}
void Find(SqList abc)//3.表中元素查找
{
int a,m=0,i=0;
printf("请输入需要查找的数据:");
scanf("%d",&a);
while (i<abc.length)//遍历
printf("\t 0退出菜单!\n");
printf("****************************************************\n");
printf("请选择:");
scanf("%d",&a);
switch(a)
{
case 0:
return 0;
case 1://建立顺序表
{
int n,i;
int x;
printf("n=");
scanf("%d", &n);
for(i=0;i<n;i++)
{
printf("No %d = ", i+1);
scanf("%d", &x);
list.elem[i]=x;
}
list.length=n;
}
void traverse(SqList abc)//2.表的遍历
typedef int ElemType; //元素类型
typedef struct list
{
ElemType elem[MAXSIZE]; //静态线性表
int length; //表的实际长度
}SqList; //顺序表的类型名
void creSqList(SqList &list)//1.建立顺序表
实验1顺序表的操作
一、实验要求
1.输入一组整型元素序列,建立顺序表。
2.实现该顺序表的遍历。
3.在该顺序表中进行顺序查找某一元素,查找成功返回1,否则返回0。
4.判断该顺序表中元素是否对称,对称返回1,否则返回0。
5.实现把该表中所有奇数排在偶数之前,即表的前面为奇数,后面为偶数。
6.*输入整型元素序列利用有序表插入算法建立一个有序表。
{
int i=0,count=0,m=0,n=0;
int len1,len2;
int *str1,*str2;
for( ;i<abc.length;i++)
{
count++;
}
//printf ("count=%d\n",count) ;
if ( abc.length % 2 == 0 )//数组元素总数为偶数个
int *p ,*q ,temp;
p=&abc.elem[0];
q=&abc.elem[abc.length-1];
while ( p < q )
{
if ( *p % 2 != 0)//偶数
{
p++;
continue;
}
if ( *q % 2 == 0 )
{
q--;
continue;
}
temp=*p;
system("cls");
if(flag==0)
{
printf("先建立顺序表!\n");
symmetry(myList);
break;
case 5://实现把该表中所有奇数排在偶数之前,即表的前面为奇数,后面为偶数
system("cls");
if(flag==0)
{
printf("先建立顺序表!\n");
printf("\t 6 *输入整型元素序列利用有序表插入算法建立一个有序表。\n");
//printf("\t 7 *利用算法6建立两个非递减有序表并把它们合并成一个非递减有序表\n");
//printf("\t 8 *综合训练:利用顺序表实现一个班级学生信息管理(数据录入、插入、删除、排序、查找等)\n");
{
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");
}
int main()
{
SqList myList;
int i,n,x,a,flag=0,k;
while(1)
{
printf("****************************************************\n");
m++;
}
}
for (i = 0 ; i < count / 2 ; i ++ )
{
if (str1[i]==str2[abc.length / 2 - i - 1])
n=1;
else
n=0;
}
printf("第四题的答案是:%d\n",n);
}
}
void jiou(SqList abc)//5.
{
len1=count/2-1;
len2=count/2+1;
str1=(int*)malloc(len1*sizeof(int));
str2=(int*)malloc(len2*sizeof(int));
for (int i = 0 ; i < count ; i ++ )
{
if (i <= count/2-1 )
7.*利用算法6建立两个非递减有序表并把它们合并成一个非递减有序表。
8.编写一个主函数,调试上述算法。
9.*综合训练:利用顺序表实现一个班级学生信息管理(数据录入、插入、删除、排序、查找等)
二、源代码
#include "stdio.h"
#include "stdlib.h"
#define MAXSIZE 100 //表中元素的最大个数
b)选择1建立顺序表:
c)选择2输出线性表的长度及内容:
d)选择3查找数据。表内含有则输出1,否则为0:
e)选择4,判断是否为对称表。若是输出1,否则输出0:
f)选择5,排序。将奇数排在偶数之前:
g)选择6,插入一个新数据:
h)选择0,退出:
{
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]);
creSqList(myList);
flag=1;
break;
case 2://表的遍历
system("cls");
if(flag==0)
{
printf("先建立顺序表!\n");
break;
}
printf("您刚才总共输入了%d个元素,它们分别是:\n\n\n", myList.length);
traverse(myList);
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 < a.length ;i++)
{
if ( a.elem[i] > k)
break;
case 3://在该顺序表中进行顺序查找某一元素,查找成功返回1,否则返回0。
system("cls");
if(flag==0)
{
printf("先建立顺序表!\n");
break;
}
Find(myList);
break;
case 4://判断该顺序表中元素是否对称,对称返回1,否则返回0。
{
if (abc.elem[i]==a)//判断元素是否与输入值相等
{
m=1;
break;//相等则跳出循环
}
else
{
m=0;
}
i++;
}
printf("第三题答案是:%d\n\n\n",m);
}
void symmetry(SqList abc)//4.判断表是否为对称表,若是返回1,否则为0;
//首先应考虑元素总数的个数。奇数时先找到中间元素,然后再比较其余元素是否一样。若为偶数,则直接头尾比较
printf("\t 1建立顺序表\n");
printf("\t 2表的遍历\n");
printf("\t 3在该顺序表中进行顺序查找某一元素,查找成功返回1,否则返回0。\n");
printf("\t 4判断该顺序表中元素是否对称,对称返回1,否则返回0。\n");
printf("\t 5实现把该表中所有奇数排在偶数之前,即表的前面为奇数,后面为偶数\n");
{
int i , j , k , n ;
for ( i = 0 ; i <= a.length-1 ; i ++ )
{
if ( a.elem [i] > a.elem [i+1] )
{
if ( i+1 < a.length )
{
j=a.elem [i+1];
a.elem [i+1]=a.elem [i];
{
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]);
break;
}
Insert(myList);
break;
case 6:
system("cls");
if(flag==0)
{
printf("先建立顺序表!\n");
break;
}
Insert(myList);
break;
default:
printf("请输入合法数字!\n");
}
}
}
}
三、运行结果
a)程序主界面:
m++;
}
}
for (i = 0 ; i < count / 2 ; 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;
len2=count/2;
str1=(int*)malloc(len1*sizeof(int));
str2=(int*)malloc(len2*sizeof(int));//两个可变数组
for (i=0;i<count;i++)//将元素分配到两个数组中
{
if (i<=count/2-1)//从中间分开
*p=*q;
*q=temp;
}
printf("调整之后为:\n");
for (int i = 0 ; i<abc.length;i++)
{
printf("%d\t",abc.elem[i]);
}
printf("\n");
}
void Insert(SqList a )//6.因为上一步奇偶排序后有序表变为了无序表。故先做排序。采用冒泡排序方法
{
for(int i=0;i<abc.length;i++)
{
printf("%d ", abc.elem[i]);
}பைடு நூலகம்
}
void Find(SqList abc)//3.表中元素查找
{
int a,m=0,i=0;
printf("请输入需要查找的数据:");
scanf("%d",&a);
while (i<abc.length)//遍历
printf("\t 0退出菜单!\n");
printf("****************************************************\n");
printf("请选择:");
scanf("%d",&a);
switch(a)
{
case 0:
return 0;
case 1://建立顺序表
{
int n,i;
int x;
printf("n=");
scanf("%d", &n);
for(i=0;i<n;i++)
{
printf("No %d = ", i+1);
scanf("%d", &x);
list.elem[i]=x;
}
list.length=n;
}
void traverse(SqList abc)//2.表的遍历
typedef int ElemType; //元素类型
typedef struct list
{
ElemType elem[MAXSIZE]; //静态线性表
int length; //表的实际长度
}SqList; //顺序表的类型名
void creSqList(SqList &list)//1.建立顺序表
实验1顺序表的操作
一、实验要求
1.输入一组整型元素序列,建立顺序表。
2.实现该顺序表的遍历。
3.在该顺序表中进行顺序查找某一元素,查找成功返回1,否则返回0。
4.判断该顺序表中元素是否对称,对称返回1,否则返回0。
5.实现把该表中所有奇数排在偶数之前,即表的前面为奇数,后面为偶数。
6.*输入整型元素序列利用有序表插入算法建立一个有序表。
{
int i=0,count=0,m=0,n=0;
int len1,len2;
int *str1,*str2;
for( ;i<abc.length;i++)
{
count++;
}
//printf ("count=%d\n",count) ;
if ( abc.length % 2 == 0 )//数组元素总数为偶数个
int *p ,*q ,temp;
p=&abc.elem[0];
q=&abc.elem[abc.length-1];
while ( p < q )
{
if ( *p % 2 != 0)//偶数
{
p++;
continue;
}
if ( *q % 2 == 0 )
{
q--;
continue;
}
temp=*p;
system("cls");
if(flag==0)
{
printf("先建立顺序表!\n");
symmetry(myList);
break;
case 5://实现把该表中所有奇数排在偶数之前,即表的前面为奇数,后面为偶数
system("cls");
if(flag==0)
{
printf("先建立顺序表!\n");
printf("\t 6 *输入整型元素序列利用有序表插入算法建立一个有序表。\n");
//printf("\t 7 *利用算法6建立两个非递减有序表并把它们合并成一个非递减有序表\n");
//printf("\t 8 *综合训练:利用顺序表实现一个班级学生信息管理(数据录入、插入、删除、排序、查找等)\n");
{
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");
}
int main()
{
SqList myList;
int i,n,x,a,flag=0,k;
while(1)
{
printf("****************************************************\n");
m++;
}
}
for (i = 0 ; i < count / 2 ; i ++ )
{
if (str1[i]==str2[abc.length / 2 - i - 1])
n=1;
else
n=0;
}
printf("第四题的答案是:%d\n",n);
}
}
void jiou(SqList abc)//5.
{