线性表

#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
#define maxsize 200
typedef int ElemType;
typedef struct{
ElemType elem[maxsize];
int last;
int length;
}Sqelist;
int setList(Sqelist *L){
// L->elem=(ElemType*)malloc(maxsize*sizeof(ElemType));
int i;
printf("请输入线性表长度:");
scanf("%d",&(L->length));
printf("请输入线性表中元素:");
for(i=0;i<L->length;i++){
scanf("%d",&(L->elem[i]));
}
return 0;
}
//2.4
int insertList(Sqelist *L,int x){
int i,a;
if(L->length==0){
printf("线性表为空");
exit(-1); 
}
else {
   L->length=L->length+1;
   for(i=0;i<=L->length-1;){
    if(L->elem[i]<=x){//线性表元素小于x, 数组后移 
i++;
    }
    else break;
   }
   a=i;//a记录i 
   for(i=L->length-1;i>=a+1;i--){
    L->elem[i]=L->elem[i-1];
}
L->elem[a]=x;
}
printf("插入x元素后的线性表为:"); 
for(i=0;i<=L->length-1;i++){
printf("%d ",L->elem[i]);
}
return 0;
}
//2.5
int deleteList(Sqelist *L,int i,int k){
int j;
if(L->length==0){
printf("线性表为空");exit(-1); 
}
else if(i<1||i>L->length||i+k>L->length){
printf("i>线性表长度");exit(-1); 
}
    else {
    for(j=i;j<i+k;j++){
    L->elem[j-1]=L->elem[k];
    }
    L->length=L->length-(1+k);
    }
    return 0;
}
//2.6
int inversionList(Sqelist *L){
Sqelist b;
int i,j=0;
b.length=L->length;
if(L->length==0){
printf("线性表为空");
exit(-1); 
}
else{
for(i=0;i<L->length;i++){
b.elem[b.length-(1+i)]=L->elem[i];
}
}
for(i=0;i<=b.length-1;i++){
printf("%d ",b.elem[i]);
}
return 0;
}
//2.6
int ConvertList(Sqelist *L){
int i,temp;
if(L->length==0){
printf("线性表为空");
exit(-1); 
}
else{
for(i=0;i<=(L->length-1)/2;i++){
temp=L->elem[i];
L->elem[i]=L->elem[L->length-(1+i)];
L->elem[L->length-(1+i)]=temp;
}
}
for(i=0;i<L->length;i++){
printf("%d ",L->elem[i]);
} 
return 0;
}
int main() {
Sqelist a;
int i,k,x;
scanf("%d",&i);
scanf("%d",&k);
setList(&a);
deleteList(&a,i,k);//删除i-k的元素 
printf("请输入要插入的元素x:");
scanf("%d",&x);
insertList(&a,x);//插入元素x 
inversionList(&a);
ConvertList(&a);
return 0;
}
讨论技术欢迎加群:翻转世界IT 386707638
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值