2025王道考研13页2.1.2参考代码(静态数组版本)

#include<stdio.h>
#define MaxSize 10
typedef struct{
    int data[MaxSize];
    int length;
}SqList;
//初始化静态顺序表
void InitList(SqList &L){
    for(int i=0;i<MaxSize;i++){
        L.data[i]=0;
    }
    L.length=0;
}
//创建静态顺序表
void CreateList(SqList &L){  
    int num;  
    printf("请输入要往顺序表中加入的整数(输入9999退出):");  
    while(scanf("%d", &num) == 1 && num != 9999 && L.length < MaxSize)  
    {  
        L.data[L.length++] = num;  
        printf("顺序表的长度是:%d\n", L.length);  
        printf("剩余位置的数量:%d\n", MaxSize - L.length);  
        printf("请输入要往顺序表中加入的整数(输入9999退出):");  
    }  
}
//遍历静态顺序表
void TravelList(SqList &L){
    for(int i=0;i<L.length;i++){
        printf("%d ",L.data[i]);
    }
    printf("\n");
}
//求表长
void length(SqList L){
    printf("%d\n",L.length);
}
//按值查找操作
void Locate(SqList L,int e){
    int count=0;
    for(int i=0;i<L.length;i++){
        if(L.data[i]==e){
            printf("%d出现在顺序表的第%d个位置!\n",e,(i+1));
            count+=1;
        }
    }
    if(count==0)
        printf("在顺序表中没有找到元素%d\n",e); 
}
//按位查找操作
int GetElem(SqList L,int i){
    if(i<0||i>L.length)
        return -1;
    else
        return L.data[i-1];
}
//插入操作(在L中的第i个位置插入指定元素e)
void ListInsert(SqList &L,int i,int e){
    if(i<=0||i>L.length+1){
        printf("插入的位置不合法!");
        return;
    }
    for(int j=L.length;j>=i;j--)
        L.data[j]=L.data[j-1];
    L.data[i-1]=e;//思路简单记忆:先从后往前往后挪,直到要插入位置的下一个位置,然后赋值该位置 
    L.length++;
}
//删除操作删除表L中第i个位置的元素,并且用e返回删除元素的值
bool ListDelete(SqList &L,int i,int &e){
    if(i<=0||i>L.length){
        return 0;
    }
    e=L.data[i-1];
    for(int j=i;j<L.length;j++){
        L.data[j-1]=L.data[j];
    }//思路简记:先把值赋给e然后从前往后往前挪 
    L.length-=1;
    return 1;
}
//判断静态顺序表时候空 
bool Empty(SqList L){
    if(L.length)
        return 1;
    else
        return 0;
}
//销毁静态顺序表
void Destory(SqList &L){
    for(int i=0;i<L.length;i++){
        L.data[i]==0;
    }
    L.length=0;
    printf("静态顺序表已经销毁!");

int main() {  
    SqList L;  
    int choice;  
  
    do {  
        printf("\n请选择操作:\n");  
        printf("1. 初始化表\n");  
        printf("2. 创建表\n");  
        printf("3. 遍历表\n");  
        printf("4. 获取长度\n");  
        printf("5. 按值查找\n"); 
        printf("6. 按位查找\n"); 
        printf("7. 按位插入\n");
        printf("8. 按位删除\n");
        printf("9. 判空\n");
        printf("10. 销毁表\n");
        printf("11. 退出\n");  
        scanf("%d", &choice);  
  
        switch (choice) {  
            case 1:  
                InitList(L);  
                printf("列表已初始化。\n");  
                break;  
            case 2:  
                CreateList(L);  
                printf("列表已创建。\n");  
                break;  
            case 3:
                printf("遍历顺序表得到的结果是:");
                TravelList(L);  
                break;  
            case 4:
                printf("表长是:");
                length(L);  
                break;  
            case 5: {  
                int e;  
                printf("按值查找请输入:");  
                scanf("%d", &e);  
                Locate(L, e);  
                break;  
            }
            case 6: {
                int i;
                printf("按位查找请输入:");
                scanf("%d",&i);
                printf("顺序表中第%d个元素是%d(如果是-1代表没找到)",i,GetElem(L,i));
                break;
            }
            case 7:  {
                int i,e;
                printf("请输入要插入元素的位置:");
                scanf("%d",&i);
                printf("请输入要插入元素值:");
                scanf("%d",&e);
                ListInsert(L,i,e);
                printf("插入后的顺序表是:");
                TravelList(L);
                printf("插入后的顺序表的表长是:");
                length(L);
                break;
            }
            case 8:{
                int i,e;
                printf("请输入要删除元素的位置:");
                scanf("%d",&i);
                if(ListDelete(L,i,e)){
                    printf("删除第%d个位置的元素成功!\n",i);
                    printf("删除的元素是:%d",e);
                    printf("删除后的顺序表是:");
                    TravelList(L);
                    printf("删除后的顺序表的表长是:");
                    length(L);
                }
                else    
                    printf("输入的删除位置不合法!");    
                break;
            }
            case 9:{
                if(Empty(L))
                    printf("静态顺序表非空!");
                else
                    printf("静态顺序表空了!");
                break;
            }
            case 10:{
                Destory(L);
                break;
            }
            case 11:
                printf("程序退出。\n");  
                break;
            default:  
                printf("无效的选择,请重新输入。\n");  
        }  
    } while (choice != 11);  
  
    return 0;  
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值