C语言实现线性表的插入和删除操作

这其实是上机实验的题目,在网上找了找资料发现都是C++的,参考着《数据结构(C语言版)》(清华大学出版社)里面的伪代码实现的。

实现后加上了备注,代码条理还算清晰就拿出来分享一下。

题目要求:

设计程序建立一个顺序表,要求从键盘输入整数,并完成添加插入和删除元素功能,并将该顺序表的元素从屏幕显示出来。

使用malloc和realloc函数动态分配内存地址。

完整代码:

#include 
#include 

#define LIST_INIT_SIZE    5    //线性表初始长度
#define LISTINCREMENT    5    //线性表每次扩充长度

#define OK                1
#define ERROR            0

//线性表结构体
typedef struct SqList{    
    int *elem;
    int len;
    int size;
};

//初始化线性表
int InitList_Sq(struct SqList *L){
    //使用malloc函数,申请一段连续的存储空间
    L->elem = (int *)malloc(LIST_INIT_SIZE * sizeof(int));
    if(!L->elem)exit(0);
    L->len=0;
    L->size = LIST_INIT_SIZE;
    return OK;
}

//向线性表中插入数据
int ListInsert_Sq(struct SqList *L,int i,int e){
    if(i<1||i>L->len+1) return ERROR;
    if(L->len>=L->size){
        //使用realloc函数,在原本的基地址上申请更大的存储空间
        int *newbase = (int *)realloc(L->elem,(LIST_INIT_SIZE + LISTINCREMENT) * sizeof(int));
        //如果申请空间失败则结束程序
        if(!newbase)exit(0);
        L->size += LISTINCREMENT;
    }
    int *q = &(L->elem[i-1]);
    int *p;
    for(p=&L->elem[L->len-1];p>=q;--p)
        *(p+1)=*p;
    *q=e;
    ++L->len;
    return OK;
}

//删除线性表中的数据
int ListDelete_Sq(struct SqList *L,int i,int *e){
    if(i<1||i>L->len) return ERROR;
    int *p=&(L->elem[i-1]);
    *e=*p;
    int q= L->elem + L->len-1;
    for(++p;p<=q;++p)
        *(p-1)=*p;
    L->len--;
    return OK;
}

//输出线性表中的数据
int ListShow_Sq(struct SqList *L,char* s){
    printf("%s",s);
    int i;
    for(i=0;ilen;i++){
        printf("%d ",L->elem[i]);
    }
    putchar('\n');
}

void main(){
    int i;
    struct SqList L;
    
    //初始化线性表
    InitList_Sq(&L);
    
    //输入数据
    int n;
    printf("预先输入的原始数据个数是:");
    scanf("%d",&n);
    printf("请线性表中%d个原始数据:",n);
    for(i=0;i


截图:

C语言实现线性表的插入和删除操作_第1张图片


你可能感兴趣的:(算法练习,C语言)