千家信息网

C语言如何实现顺序表的插入删除

发表于:2024-10-08 作者:千家信息网编辑
千家信息网最后更新 2024年10月08日,本文小编为大家详细介绍"C语言如何实现顺序表的插入删除",内容详细,步骤清晰,细节处理妥当,希望这篇"C语言如何实现顺序表的插入删除"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知
千家信息网最后更新 2024年10月08日C语言如何实现顺序表的插入删除

本文小编为大家详细介绍"C语言如何实现顺序表的插入删除",内容详细,步骤清晰,细节处理妥当,希望这篇"C语言如何实现顺序表的插入删除"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

首先声明一个顺序表的结构 (数组的第一个元素是0,但是顺序表的第一个一般 从1(人为设定)开始)

#include #include  #define MAXSIZE 10#define OK   1#define FALSE 0  typedef int Elemtype;typedef bool Status; typedef struct list{        Elemtype *elem;        int len;        //数据个数        int listsize;   //顺序表长度}List;
  • listsize 代表这个顺序表的最大容量,可以随时扩容

  • len 代表在你创建的这个顺序表中有几个有效的数据,总是小于等于listsize

一、初始化顺序表属性

void list_init(List *L){        L->elem=(Elemtype *)malloc(MAXSIZE*sizeof(Elemtype));//开辟空间        if(L->elem==NULL)//判断空间是否开辟成功        {                printf("malloc fail\n");                exit(0);        }         L->len=0;    //初始化数据有效数据为0        L->listsize=MAXSIZE; //初始化数组长度为MAXSIZE}

二、顺序表的插入

Status list_insert(List *L,int i,Elemtype data){        Elemtype *base,*insert,*p;        if(i<1 || i>L->len+1 || L==NULL)        {                printf("位置输入错误\n");                return FALSE;        }        if(L->len > L->listsize)        {                base=(Elemtype *)realloc(L->elem,(L->listsize+MAXSIZE)*sizeof(Elemtype));//动态扩容                L->elem=base;                L->listsize+=MAXSIZE;//更新顺序表大小        }        insert=&(L->elem[i-1]);//目标指针指向要插入的目标地址          //指向最后一个元素的地址        for(p=L->elem + L->len-1;p>=insert;p--)        {                *(p+1)=*p;        }        *insert=data;        L->len++;        return OK;}

三、删除

Status delete_list(List *L,int i){        ElemType *q,*delete_i;        if(L==NULL||i<0||i>L->len)        return FALSE;        delete_i=&(L->elem[i-1]);//用指针指向要删除位置的地址        q=L->elem + L->len-1;    //q指针指向顺序表最后一个位置的地址   首地址加上数组长度就是最后一个元素地址        for(delete_i=delete_i+1;delete_i<=q;++delete_i)//从删除位置的地址的下一个元素开始,每个往前移动一位        {                *(delete_i-1)=*delete_i;                //前一个位置等于后一个        }        L->len--;                return OK;}

全部程序

#include #include  #define MAXSIZE 10#define OK   1#define FALSE 0  typedef int Elemtype;typedef bool Status; typedef struct list{        Elemtype *elem;        int len;        int listsize;}List;  void list_init(List *L){        L->elem=(Elemtype *)malloc(MAXSIZE*sizeof(Elemtype));//开辟空间        if(L->elem==NULL)//判断空间是否开辟成功        {                printf("malloc fail\n");                exit(0);        }         L->len=0;    //初始化数据有效数据为0        L->listsize=MAXSIZE; //初始化数组长度为MAXSIZE} Status list_insert(List *L,int i,Elemtype data){        Elemtype *base,*insert,*p;        if(i<1 || i>L->len+1 || L==NULL)        {                printf("位置输入错误\n");                return FALSE;        }        if(L->len > L->listsize)        {                base=(Elemtype *)realloc(L->elem,(L->listsize+MAXSIZE)*sizeof(Elemtype));                L->elem=base;                L->listsize+=MAXSIZE;        }        insert=&(L->elem[i-1]);//目标指针指向要插入的目标地址          //指向最后一个元素的地址        for(p=L->elem + L->len-1;p>=insert;p--)        {                *(p+1)=*p;        }        *insert=data;        L->len++;        return OK;} Status list_delete(List *L,int i){        Elemtype *aim,*p;        if(i<0 || i>L->len)        {                printf("位置输入错误\n");                return FALSE;        }        aim=&(L->elem[i-1]);//目标指针指向要删除的目标地址        p=(L->elem+L->len-1); //指向最后一个元素的地址        for(aim=aim+1;aim<=p;++aim) //目标地址滑动删除        {                *(aim-1)=*aim;        }        L->len--;        return OK;}void show_list(List *L){        int i;        for(i=0;ilen;i++)        {                printf("elem[%d]=%d\n",i+1,L->elem[i]);        }        printf("\n");}int main(){        int i;        List L;        list_init(&L);        for(i=0;i<10;i++)        {                list_insert(&L,i+1,i+1);        }        printf("插入前的顺序表\n");        show_list(&L);         printf("插入后的顺序表  在5位置插入99\n");        list_insert(&L,5,99);        show_list(&L);         printf("删除后的顺序表  把5位置删除\n");        list_delete(&L,5);        show_list(&L);        return 0;}

运行结果如下

读到这里,这篇"C语言如何实现顺序表的插入删除"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。

0