简单顺序表的增删

文章详细描述了如何在C语言中使用结构体和函数实现了一个简单的单向链表,包括初始化、插入和删除操作的示例代码及其实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <stdio.h>

#include <stdlib.h>

#define List_Init_Size 100 // 容量

#define ListIncrement 10   // 分配增量

int n;

typedef struct

{

    int *elem;

    int length;

    int listsize; // 容量

} Sqlist;

void InitList_Sq(Sqlist *L)

{

    L->elem = (int *)malloc(100 * sizeof(int));

    if (!L->elem)

    {

        exit(EXIT_FAILURE);

    }

    L->length = 0;

    L->listsize = List_Init_Size;

} // 初始化操作

int ListInsert_Sq(Sqlist *L, int i, int e)

{

    if (L->length == L->listsize)

    {

        L->elem = (int *)malloc((List_Init_Size + ListIncrement) * sizeof(int));

    }

    if (i < 1 || i > L->length + 1)

    {

        return 1;

    }

    int *q, *p;

    q = L->elem + i - 1;

    p = L->elem + L->length - 1;

    while (p >= q)

    {

        *(p + 1) = *p;

        p--;

    }

    *q = e;

    L->length++;

    return 0;

} // 添加元素

int ListDelete_Sq(Sqlist *L, int i, int *e)

{

    if (i < 1 || i > L->length)

    {

        return 2;

    }

    int *p;

    p = &L->elem[i - 1];

    *e = *p;

    p++;

    while (p <= L->elem + L->length - 1)

    {

        *(p - 1) = *p;

        p++;

    }

    L->length--;

    return 0;

} // 删除操作

int main()

{

    int i, x, temp, e;

    Sqlist list;

    void InitList_Sq(Sqlist * L);

    int ListInsert_Sq(Sqlist * L, int i, int e);

    int ListDelete_Sq(Sqlist * L, int i, int *e);

    InitList_Sq(&list);

    printf("please input the number for n\n");

    scanf("%d", &n);

    printf("n=%d", n);

    list.length = n;

    for (i = 0; i < n; i++)

    {

        scanf("%d", &list.elem[i]);

        printf("list[%d]=%d", i, list.elem[i]);

    }

    printf("The list before insertion is\n");

    for (i = 0; i < n; i++)

    {

        printf("%d", list.elem[i]);

    }

    printf("\n");

    printf("please input the position where you want to insert a value\nposition=");

    scanf("%d", &i);

    printf("please input the value you want to insert\nx=");

    scanf("%d", &x);

    temp = ListInsert_Sq(&list, i, x);

    switch (temp)

    {

    case 0:

        printf("The insertion is successful!\n");

        printf("The list is after insertion is\n");

        for (i = 0; i < list.length; i++)

        {

            printf("%d", list.elem[i]);

        }

        printf("\n");

        break;

    case 1:

        printf("The insertion is not successful!\n");

        break;

    }

    printf("The list before deleting is\n");

    for (i = 0; i < list.length; i++)

    {

        printf("%d", list.elem[i]);

    }

    printf("\n");

    printf("please input the where you want to delete a value\nposition=");

    scanf("%d", &i);

    temp = ListDelete_Sq(&list, i, &e);

    switch (temp)

    {

    case 0:

        printf("The deleting is successful!\n");

        printf("The list is after deleting is\n");

        for (i = 0; i < list.length; i++)

        {

            printf("%d", list.elem[i]);

        }

        printf("\n");

        break;

    case 2:

        printf("The deleting is not successful!\n");

        break;

    }

    return 0;

}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值