数据结构算法题
在一个递增的顺序表的相应位置,插入元素e,使用scanf函数依次读取数据。使用for循环中的printf函数,依次输出修改后的顺序表
思路:获取递增的顺序表,通过比较大小获得元素e 应该插入的位置 i 。保存下来这个位置 ,利用for 循环,将 i 之后的元素后移一位。在 i+1 插入元素e。顺序表长度 + 1
#include<stdio.h>
#include<stdlib.h>
#define LIST_INIT_SIZE 100 //顺序表初识分配空间大小
#define LISTINCREMENT 10 //顺序表空间增量大小
typedef struct {
int *elem;
int length;
}Sqlist;
int InitList(Sqlist &L){
//构造顺序表
L.elem=(int*)malloc(20*sizeof(int));
if(!L.elem)
return 0;
L.length=0;
return 1;
}
void readList(Sqlist &L){
int i,len;
i=0;
printf("请输入顺序表的长度:");
scanf("%d",&len);
L.length = len;
printf("请输入一个有序递增的顺序表:");
for(i=0;i<L.length;i++){
scanf("%d",&L.elem[i]);
getchar();
}
}
int InsertElem(Sqlist &L,int e){
int i,j;
i=0;
for(i=0; i<L.length; i++){
if(L.elem[i] > e){//寻找元素e 对应的插入位置 i
break;
}
}
for(j=L.length-1;j>=i;j--)
L.elem[j+1] = L.elem[j];//从i位置开始,依次后调,腾出插入位置
L.elem[j+1]=e;
L.length++; // 长度+1
return 1;
}
void writeList(Sqlist &L){
int i;
for(i=0;i<L.length;i++){
printf("%d ",L.elem[i]);
}
printf("\n");
}
int main(){
int x;
Sqlist L;
InitList(L);
readList(L);
writeList(L); // 查看输入的顺序表
printf("请输入要插入的数字:");
scanf("%d",&x);
getchar();//吃掉回车键
InsertElem(L,x);
writeList(L);
}
1. 运行结果:
请输入顺序表的长度:6
请输入一个有序递增的顺序表:1 2 3 6 9 13
1 2 3 6 9 13
请输入要插入的数字:5
1 2 3 5 6 9 13
--------------------------------
Process exited after 16.66 seconds with return value 0
请按任意键继续. . .