使用C语言实现-顺序表初始化、创建、插入、删除操作

#include <stdio.h>
#include <stdlib.h>
# include <malloc.h>
#define MAXSIZE 100
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int ElemType;
typedef int Status;

typedef struct
{
    ElemType *pList;
    int sqSize;
    int sqLength;
}SqList;

Status InitList(SqList *L);

Status CreateList(SqList *L);

Status PrintList(SqList *L);
Status InsertList(SqList *L,int i,ElemType e);

Status DeleteSqList(SqList *L,int i,ElemType *e);




//初始化一个空的线性表
Status InitList(SqList *L)
{
    L->pList = (SqList *)malloc(sizeof(SqList)); //申请内存空间
    if(L->pList == NULL)
    {
        printf("内存空间分配失败!");
    }
    else
    {
        L->sqLength = 0;
    }

    return OK;

}

//创建顺序表
Status CreateList(SqList *L)
{
    int n,i;
    printf("请输入要输入的数据的个数:");
    scanf("%d",&n);
    if(n>MAXSIZE)
    {
        printf("超出最大容量,请重新输入");
    }
    printf("请输入:");
    for( i=0;i<n;i++)
    {
        scanf("%d",&L->pList[i]);
        L->sqLength++;
    }
    return OK;



}

//输出顺序表
Status PrintList(SqList *L)
{
    int j;
    for(j=0;j<L->sqLength;j++)
    {
        printf("%d ",L->pList[j]);
    }
    printf("\n");
    return OK;
}

//插入元素
Status InsertList(SqList *L,int i,ElemType e)
{
    int index;
    //首先合法性检查
    //是否还有空间可以插入;插入位置是否合法
    if(L->sqLength == L->sqSize || i>L->sqLength )
    {
        return FALSE;
    }

    for(index=L->sqLength-1;index>=i-1;index--)
    {
        L->pList[index+1] = L->pList[index];
    }
    L->pList[i-1] = e;
    L->sqLength++;
    return OK;
}


//删除元素并用e返回

Status DeleteSqList(SqList *L,int i,ElemType *e)
{
    int index;
    //首先检查合法性,顺序表是否为空或者删除位置>顺序表的长度或者小于1
    if(L->sqLength == NULL ||  i<1 || i>L->sqLength)
        return FALSE;
    *e = L->pList[i-1];
    if(i<L->sqLength)
    {
        for(index=i;index<L->sqLength;index++)
        {
            L->pList[index-1] = L->pList[index];
            L->sqLength--;
        }
        return OK;
    }

}

int main()
{
    SqList L ;
    int e;
    InitList(&L);
    CreateList(&L);
    printf("-----原顺序表-----");
    printf("\n");
    PrintList(&L);
    InsertList(&L,3,0);
    printf("-----插入元素后的顺序表为-----");
    printf("\n");
    PrintList(&L);
    DeleteSqList(&L,5,&e);
    printf("-----删除元素后的顺序表为-----");
    printf("\n");
    PrintList(&L);


}

要基于C语言实现顺序表初始化插入删除等功能,可以按照以下步骤进行: ### 1. 定义必要的宏和类型 首先需要定义一些基本的数据类型和常量以方便后续编码,例如元素类型、状态类型以及列表初始大小等: ```c #include<stdio.h> #include<stdlib.h> #define OK 1 #define ERROR 0 typedef int elemtype; typedef int status; #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 ``` ### 2. 设计顺序表结构 创建一个结构体来表示顺序表,并在其中存储实际的数据元素及其相关属性(如长度和当前容量): ```c typedef struct { elemtype *elem; int length; int listsize; } Sqlist; ``` ### 3. 编写核心函数 接下来编写用于操作顺序表的核心函数,包括初始化(`initlist_Sq`)、插入(`insert_Sq`)和删除(`delete_Sq`)等方法: #### 初始化 ```c status initlist_Sq(Sqlist *L){ // 动态分配内存给elem成员变量,并设置其他成员变量的初值... } ``` #### 插入 ```c status insert_Sq(Sqlist *L, int position, elemtype value){ // 在指定位置position处插入值value... } ``` #### 删除 ```c status delete_Sq(Sqlist *L, int position, elemtype *deletedValue){ // 从指定位置position删除元素,并将其值赋给deletedValue指针所指向的位置... } ``` ### 4. 遍历输出 编写一个辅助函数`traverse_printf`用于遍历整个列表并打印每个元素: ```c void traverse_printf(Sqlist L){ // 遍历所有有效索引并打印出对应位置上的元素值... } ``` ### 5. 主程序逻辑 最后,在`main()`函数内调用上述定义好的接口实现具体的业务需求,比如初始化列表、添加几个示例数据点、执行某些特定操作等等: ```c int main(){ Sqlist L; // 调用初始化接口 initlist_Sq(&L); // 根据要求向列表中添加若干测试数据... // 使用遍历输出接口显示当前列表的状态 // 尝试执行插入删除操作,并再次查看列表的变化... // 其它可能的操作... return 0; } ``` 以上就是一个完整的基于C语言实现顺序表的基本框架了。需要注意的是这里省略了一些细节处理部分,例如边界条件检查和异常情况处理等,这些都需要根据自己项目的实际情况进一步完善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值