欢迎加qq群:453398542 学习讨论,会定期分享资料课程,解答问题。
(1)顺序表的操作
① 输入一组整型元素序列,建立线性表的顺序存储结构。
② 实现该线性表的遍历。
③ 在该顺序表中查找某一元素,查找成功显示查找元素,否则显示查找失败。
④ 在该顺序表中删除或插入指定元素。
⑤ 建立两个按值递增有序的顺序表,将他们合并成一个按值递增有序的顺序表。
#include<stdio.h>
#include<stdlib.h>
#define SIZE 20
#define MORE 10
typedef struct{
int *base; //存储空间基址
int length; //当前长度
int listsize; //当前存储容量
}SqList;
void InitList(SqList &L){
//构造线性表
L.base=(int *)malloc(SIZE*sizeof(int));
if(!L.base)
exit(0);
L.listsize=SIZE;
scanf("%d",&L.length);
for(int i=0;i<L.length;i++)
scanf("%d",&L.base[i]);
}
void Output(SqList L){
//遍历
for(int i=0;i<L.length;i++)
printf("%5d",L.base[i]);
printf("\n");
}
void Locate(SqList L,int &e){
//查找
int i;
for(i=0;i<=L.length;i++){
if(L.base[i]==e){
printf("%d\n",L.base[i]);
break;
}
}
if(i>L.length)
printf("查找失败!");
}
void Delete(SqList &L,int i,int &e){
//删除第i个元素
int j;
if(i<1||i>L.length) exit(0);
e=L.base[i-1];
for(j=i-1;j<L.length;j++){
L.base[j]=L.base[j+1];
}
L.length--;
}
void Insert(SqList &L,int i,int e){
//插入
SqList q,p;
int j;
if(i<1||i>L.length+1)
exit(0);
if(L.length>=L.listsize){
int *newbase=(int *)realloc(L.base,(L.listsize+MORE)*sizeof(int));
if(!newbase) exit(0);
L.base=newbase;
L.listsize+=MORE;
}
for(j=L.length-1;j>=i-1;j--){
L.base[j+1]=L.base[j];
}
L.base[i-1]=e;
L.length++;
}
void Merge(SqList La,SqList Lb,SqList &Lc){
//合并
Lc.length=La.length+Lb.length;
Lc.base=(int *)malloc(Lc.listsize*sizeof(int));
int i,j,k;
i=0;j=0;k=0;
while(i<La.length&&j<Lb.length){
if(La.base[i]<=Lb.base[j]){
Lc.base[k++]=La.base[i++];
}
else
Lc.base[k++]=Lb.base[j++];
}
while(i<La.length){
Lc.base[k++]=La.base[i++];
}
while(j<Lb.length){
Lc.base[k++]=Lb.base[j++];
}
}
int main(){
SqList La,Lb,Lc;
int d,k,e;
printf("输入表的长度:");
InitList(La);
printf("输入要查找的数:");
scanf("%d",&d) ;
Locate(La,d);
printf("要删除第几个数?");
scanf("%d",&k);
Delete(La,k,e);
printf("删除的数为:%d\n",e);
Output(La);
int a,b;
printf("输入要插入的位置和数:");
scanf("%d%d",&a,&b);
Insert(La,a,b);
Output(La);
printf("输入另一个表的长度:");
InitList(Lb);
Merge(La,Lb,Lc);
Output(Lc);
return 0;
}