静态数组实现顺序线性表(C语言)

静态数组实现顺序线性表

/*
静态数组实现顺序线性表
*/
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100         //线性表存储空间的初始分配量(静态)
#define ElemType int        //线性表数据类型

#define OK 0                //操作成功执行
#define ERROR -1            //操作失败
#define OVERFLOW -2         //溢出
typedef int Status;

typedef struct {
    ElemType data[MAXSIZE];     // 数据域
    int length;                 //线性表当前长度
}SqList;

SqList* InitList_Sq();                              //1.创建
Status DestroyList_Sq(SqList *L);                       //2.销毁
Status ClearList_Sq(SqList *L);                     //3.清空
Status ListEmpty_Sq(SqList *L);                     //4.判空
int ListLength_Sq(SqList *L);                       //5.求长
ElemType GetElem_Sq(SqList *L, int i);                  //6.访问元素
int LocateElem_Sq(SqList *L, ElemType e);               //7.求元素位序
ElemType PriorElem_Sq(SqList *L, ElemType *cur_e);      //8.求前驱
ElemType NextElem_Sq(SqList *L, ElemType *cur_e);       //9.求后继
Status ListInsert_Sq(SqList *L, int i, ElemType e); //10.插入元素
ElemType ListDelete_Sq(SqList *L, int i);               //11.删除元素
Status ListTraverse_Sq(SqList *L);                  //12.遍历

SqList* InitList_Sq()       //1.创建
{
    SqList *L;
    L = (SqList *)malloc(sizeof(SqList));
    L->length = 0;
    return L;
}
Status DestroyList_Sq(SqList *L)        //2.销毁
{
    free(L);
    return OK;
}
Status ClearList_Sq(SqList *L)      //3.清空
{
    L->length = 0;
    return OK;
}
Status ListEmpty_Sq(SqList *L)      //4.判空
{
    if (L->length == 0)return true;
    else return false;
}
int ListLength_Sq(SqList *L)        //5.求长
{
    return L->length;
}
ElemType GetElem_Sq(SqList *L, int i)       //6.访问元素
{
    return L->data[i - 1];
}
int LocateElem_Sq(SqList *L, ElemType e)        //7.求元素位序
{
    for (int i = 0; i < L->length; i++)
    {
        if (L->data[i] == e)return (i + 1);
    }
}
ElemType PriorElem_Sq(SqList *L, ElemType *cur_e)       //8.求前驱
{
    ElemType *p;
    p = cur_e - 1;
    return *p;
}
ElemType NextElem_Sq(SqList *L, ElemType *cur_e)        //9.求后继
{
    ElemType *p;
    p = cur_e + 1;
    return *p;
}
Status ListInsert_Sq(SqList *L, int i, ElemType e)      //10.插入元素
{
    if (i<1 || i>L->length + 1) return ERROR;
    if (L->length >= MAXSIZE) return OVERFLOW;
    for (int k = L->length - 1; k >= i - 1; k--)
    {
        L->data[k + 1] = L->data[k];
    }
    L->data[i - 1] = e;
    L->length++;
    return OK;
}
ElemType ListDelete_Sq(SqList *L, int i)        //11.删除元素
{
    if (i<1 || i>L->length + 1) return ERROR;
    if (ListEmpty_Sq(L))return OVERFLOW;
    ElemType e;
    e = L->data[i - 1];
    for (int k = i; k < L->length; k++)
    {
        L->data[k - 1] = L->data[k];
    }
    L->length--;
    return e;
}
Status ListTraverse_Sq(SqList *L)       //12.遍历
{
    for (int i = 0; i < L->length; i++)
    {
        printf("%d ", L->data[i]);
    }
    printf("\n");
    return OK;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。