静态数组实现顺序线性表
/*
静态数组实现顺序线性表
*/
#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;
}
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。