c语言实现顺序表的各种操作

#include<stdio.h>
#define MAX 100
typedef struct{   
    int data[MAX];
    int len;
}sqlist;
void csh(sqlist *L){
    L->len=0;
    
}
void create(sqlist *L,int n){//创表 
    int i;
    printf("请输入%d个整数:",n);
    for(i=0;i<n;i++){
        scanf("%d",&L->data[i]);
    }
    
    L->len=i;
}

int get(sqlist *L,int i,int *x){//取元素 
    /*取顺序表中第i个元素*/
    if(i<1||i>L->len){
        printf("请输入1到L->len之间的整数");
        return 0; 
    }
    else{
        *x=L->data[i-1];
        printf("%d",*x);
         return 1;
        
    
        
    }
}
int dingw(sqlist *L,int x){//找所给元素位置 
    int i=0;
    while(i<L->len&&L->data[i]!=x)
        i++;
    
    if(i>=L->len)
        return 0;
    
    else
        printf("%d位于表中第%d位",x,i+1);
    
    
    return 0;
}
int cha(sqlist *L,int i,int x){//插入元素 
    /*将x插到表的第i个位置*/
    int j;
    if(L->len>=MAX){
        printf("顺序表已满,无法进行插入");
        return -1; 
    } 
    if(i<1||i>L->len+1){
        printf("请选择正确的插入位置!");
        return 0; 
    }
    if(i==L->len+1){
        L->data[i-1]=x;
        L->len++;
        return 1;
    }
     
         
         
    for(j=L->len;j>=i;j--){
        
            L->data[j]=L->data[j-1];
            
    }
    L->data[i-1]=x;
    L->len++;
    return 1;
        

    
    
}
int shan(sqlist *L,int i,int *x){//删除元素 
    /*删除顺序表的第i个元素*/
    int j;
    if(L->len==0){
        printf("顺序表为空,无法进行删除操作!");
        return 0; 
    }
    if(i<1||i>L->len){
        printf("不存在第%d个元素,请输入正确的参数!",i);
    }
    *x=L->data[i-1];
    for(j=i;j<L->len;j++){
        L->data[j-1]=L->data[j];
    }
    L->len--;
    return 1;
}
void shuc(sqlist *L){//输出顺序表的全部元素 
    int i;
    for(i=0;i<L->len;i++){
        printf("%d ",L->data[i]);
    }
    
}
void menu(){
    printf("请选择你要进行的操作\n"); 
     
    printf("1 create    2 get    3 dingw\n");
    printf("4 cha       5 shan   6 shuc\n") ;
}


int main(){
    sqlist L;
    int  k,x,n,i;
    
    while(1){//死循环调用menu 
        menu();
        scanf("%d",&k);
    switch (k) {
        case 1:
           csh(&L);
           printf("请输入你的顺序表元素个数");
           scanf("%d",&n); 
            create(&L,n);
            printf("建立的顺序表为:");
            shuc(&L); 
            printf("\n");
            break;
        case 2:
         printf("请问你要找第几个元素:");
         scanf("%d",&i);
         printf("第%d个元素为:",i); 
         get(&L,i,&x);
        printf("\n");
            break;
        case 3:
            printf("请输入你要查看的元素:");
            scanf("%d",&x);
        dingw(&L,x);
        printf("\n");
            break;
        case 4:
            printf("请分别输入你要插入的位置和元素:");
            scanf("%d %d",&i,&x);
            cha(&L,i,x);
        printf("\n");    
            break;
        case 5:
            printf("输入你要删除元素的位置:");     
            scanf("%d",&i);
            shan(&L,i,&x);
            printf("\n");
            break;
        case 6:
            printf("当前顺序表为:"); 
            shuc(&L);
            printf("\n");
            break;     
        default:
        printf("请输入菜单中的号码!"); 
            break;
    }
    
    }    
    
    
    
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值