第一次数据结构作业
2012-04-15 22:21 璋廊 阅读(285) 评论(0) 收藏 举报编写一个完整的程序,实现顺序表的建立、插入、删除、输出等基本运算。
(1) 建立一个顺序表,含有n个数据元素。
(2) 输出顺序表及顺序表的长度。
(3) 在顺序表给定的位置i,插入一个值为x的结点。
(4) 在顺序表中删除值为x的结点或者删除给定位置i的结点。
(5) 将顺序表逆置,将结果保存到另外的顺序表中。
(6) 将顺序表按升序排序。
(7) 将两个顺序有序表A和B合并为一个有序表C。
(8) 在主函数中设计一个简单的菜单,分别测试上述算法。
综合训练:利用顺序表实现一个班级学生信息管理(数据录入、插入、删除、排序、查找等)
#include<stdio.h>
int Delete(int *s,int x,int n)//删除所有值为x的元素;
{
int i=0,p=0,k=0;
while(i<n)
{
if(s[i]==x)
{
p++;
s[k]=s[i++];
}
else {
s[k++]=s[i++];
}
}
return p;
}
void print(int *s,int n)//输出数组元素;
{
int i=0;
while(i<n)
{
printf("%d ",s[i++]);
}
printf("\n");
}
void Invert(int *s,int n)//倒置;
{
int t,i;
if(n==1)
return ;
for(i=0;i<n/2;i++)
{
t=s[i];
s[i]=s[n-i-1];
s[n-i-1]=t;
}
}
void Sort(int *s,int n)//冒泡排序;
{
int i,j,t;
for(i=1;i<n;i++)
for(j=0;j<n-i;j++)
{
if(s[j]<s[j+1])
{
t=s[j];
s[j]=s[j+1];
s[j+1]=t;
}
}
}
void Add(int *s,int x,int n)//插入一个元素:
{
int i=n-1,k=n,p=0;
while(i>=0)
{
if(s[i]<=x)
{
s[k]=s[i];
k--;i--;
}
else{
s[k]=x;break;
}
}
}
void hebin(int *a,int n,int *b,int m,int *c)//合并的有序数组:
{
int i=0,j=0,k=0;
while(i<n&&j<m)
{
if(a[i]>b[j])
{
c[k++]=b[j++];
}
else {
c[k++]=a[i++];
}
}
if(i<n)
while(i<n)
{
c[k++]=a[i++];
}
else while(j<m)
{
c[k++]=b[j++];
}
}
int main()
{
int s[101];
int i,n,x;
printf("输入一个数n表示n个数据元素!\n");
scanf("%d",&n);
printf("随机输入n个数!\n");
for(i=0;i<n;i++)
scanf("%d",&s[i]);
printf("顺序表的长度%d\n",n);
printf("输入一个数x删除所有值为x的元素!\n");
scanf("%d",&x);
int p=Delete(s,x,n);
n=n-p;
if(p==0)
printf("顺序表里没有%d\n",x);
else{
printf("删除x后的顺序表\n");
print(s,n);
}
Invert(s,n);
printf("倒置后的数组!\n");
print(s,n);
Sort(s,n);
printf("排序后的数组!\n");
print(s,n);
printf("输入一个值!\n");
scanf("%d",&x);
Add(s,x,n);
printf("插入后的数组!\n");
print(s,n+1);
printf("将数组1,2,3,4,5")
int a[5]={1,3,5,7,9};
int b[5]={0,2,4,6,8};
int c[101];
hebin(a,5,b,5,c);
print(c,10);
return 0;
}
浙公网安备 33010602011771号