顺序表的第一次

#include <stdio.h> // 线性表插入、删除、按值查找   
#define MAX_SIZE 10 // 定义线性表的最大长度  

// 线性表结构体  
typedef struct {  
    int data[MAX_SIZE]; // 存储线性表元素的数组  
    int last; // 线性表的当前长度  
} List;  

void intlist(List *L) {  
    L->last = 0; // 初始化线性表的长度为0  
}  

void Create(List *L) {  
    int i;  
    if (L->last >= MAX_SIZE - 1) { // 注意这里的条件  
        printf("线性表已满\n");  
    } else {  
        printf("请输入线性表数据个数(最多 %d 个):\n", MAX_SIZE - 1);  
        scanf("%d", &L->last);  
        
        // 检查输入的个数是否超出最大限制  
        if (L->last < 0 || L->last >= MAX_SIZE) {  
            printf("输入的个数不合法,必须在 0 到 %d 之间。\n", MAX_SIZE - 1);  
            L->last = 0; // 重置长度  
            return;  
        }  
        
        printf("请输入数据:\n");  
        for (i = 1; i < L->last+1; i++) { // 从 0 开始,读取 `last` 个数据  
            scanf("%d", &L->data[i-1]);  
        }  
    }  
}  

void insert(List *L) {  
    if (L->last >= MAX_SIZE - 1) { // 注意这里的条件  
        printf("线性表已满, 不能插入数据\n");  
    } else {  
        int position, x, j;  
        printf("请输入所要插入的位置 (1 到 %d):\n", L->last + 2);  
        scanf("%d", &position);  
        
        // 检查插入位置是否合法  
        if (position < 1 || position > L->last + 2) {  
            printf("无效的位置\n");  
        } else {  
            printf("请输入所要插入的数据:\n");  
            scanf("%d", &x);  
            // 移动元素以空出插入位置  
            for (j = L->last; j >= position - 1; j--) {  
                L->data[j + 1] = L->data[j];  
            }  
            L->data[position - 1] = x; // 插入新数据  
            L->last++; // 更新线性表长度  
        }  
    }  
}  

int main() {  
    List myList;  
    intlist(&myList);  // 初始化线性表  
    
    Create(&myList);   // 创建线性表  
    insert(&myList);   // 插入元素  

    // 输出线性表以确认插入  
    printf("线性表的元素为:\n");  
    for (int i = 0; i < myList.last; i++) {  
        printf("%d ", myList.data[i]);  
    }  
    printf("\n");  
    
    return 0;  
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值