数据结构之顺序表——c(&为取值符)

本文介绍了数据结构中的顺序表,详细讲解了如何在C语言中进行顺序表的初始化、在表尾插入元素、在指定位置插入元素、删除元素以及输出顺序表的操作。通过实例代码解析,帮助理解顺序表的基本操作。
摘要由CSDN通过智能技术生成

1.顺序表的结构定义

#define LIST_INIT_SIZE 100//线性表存储空间的初始分配量
#define LISTINCREMENT 10  //线性表存储空间的分配增量
#define OVERFLOW 0        //溢出
#define ERROR 0           //出错
#define OK 1              //成功

typedef int ElemType;

typedef struct
{
    ElemType *elem;//存储空间基址
    int length;    //当前长度
    int listsize;  //当前分配的存储容量(以sizeof(ElemType))
}SqList;

2.初始化

void InitList_Sq(SqList *L)//初始化顺序表
{
    L->elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
    if(!L->elem) exit(OVERFLOW);   //存储分配失败
    L->length=0;                   //空表长度为0
    L->listsize=LIST_INIT_SIZE;    //初始存储容量
}

3.在表尾插入一个元素

void ListInsert_Tail_Sq(SqList *L,ElemType e)
{
    if(L->length>=L->listsize)
    {
        ElemType *newbase=(ElemType *)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(ElemType));
        if(!newbase)exit(OVERFLOW);
        L->elem=newbase;
        L->listsize+=LISTINCREMENT;
    }
    L->elem[L->length++]=e;
}

4.在特定位置i插入一个元素e(如果i值分配不合法返回0,如果插入成功返回1)

int ListInsert_i_Sq(SqList *L,int i,ElemType e)//在顺序线性表L中第i个位置之前插入新的元素e
{
    if(i<1||i>L->length+1) return ERROR; //i值分配不合法
    if(L->length>=L->listsize)           //当前存储空间已满,增加分配
    {
        ElemType *newbase=(ElemType *)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(ElemType));
        if(!newbase)exit(OVERFLOW);      //存储分配失败
        L->elem=newbase;                 //新基质
        L->listsize+=LISTINCREMENT;      //增加存储容量
    }
    ElemType *q=&(L->elem[i-1]),*p;      //q为插入位置
    for(p=&(L->elem[L->length-1]);p>=q;--p)
    *(p+1)=*p;                           //插入位置后移
    *q=e;
    ++L->length;
    return OK;                            //表长增1
}

5.删除表中i位置的

int ListDelete_i_Sq(SqList *L,int i,ElemType *e)//e的为删除元素的值
{
    if(i<1||i>L->length+1) return ERROR; //i值分配不合法
    ElemType *p=&(L->elem[i-1]),*q;
    *e=*p;
    q=L->elem+L->length-1;        //表尾元素的位置&(L->elem[L->length-1])
    for(++p;p<=q;p++)
    *(p-1)=*p;
    --L->length;
    return OK;
}

5.输出顺序表

void ListPrint_Sq(SqList L)
{
    int i;
    for(i=0;i<L.length;i++)
        printf("%d  ",L.elem[i]);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值