/*线性表的定义与操作---顺序表*/
/*定义状态标志位*/
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 20 /*存储空间初始分配量*/
typedef int ElemType; /*ElemType根据实际情况定义,这里假设为int型*/
typedef int Status; /*Status为函数类型,其值为函数返回状态,如OK等*/
/*定义一个线性表结构*/
typedef struct LNode{
ElemType data[MAXSIZE]; /*数组存取数据元素,最大长度为MAXSIZE*/
int length; /*线性表当前长度*/
}Node,*List;
/* 初始化一个空线性表L */
List MakeEmpty(){
List L;
L = (List)malloc(sizeof(Node));
if(L)
return ERROR;
L->length = NULL;
return L;
}
/*获得元素:
*根据位序K,返回表L的相应元素到e中*/
Status GetElem(int k,ElemType *e,List L){
/*判断链表L是否为空及K值是否合理*/
if(L->length == NULL || k<1 || k>length+1)
return ERROR;
*e = L->data[k-1];
return OK;
}
/*查找:
*在线性表L中查找与给定值X相等的元素,如果查找成功,则返回该元素的序号;否则返回0*/
int LocateElem(ElemType X,List L){
int i;
i = 0;
if(L->length == NULL)/*判断链表不为空*/
return ERROR;
while(i<L-length && L->data[i]!=X){
i++;
}
if(i>=L-length) /* 如果没找到,返回错误信息 */
return ERROR;
else
return i; /* 找到后返回的是存储位置 */
}
/*插入:
*在位序k(从1开始)前插入一个新元素X*/
Status Insert(ElemType X,int k,List L){
int i;
if(L->length >= MAXSIZE) /*表空间已满,不能插入*/
return ERROR;
if(k<1 || k>L->length+1) /*检查插入位置的合法性*/
return ERROR;
for(i=L->length-1;i>=k-1;i--){ /*将要插入位置的元素依次往后挪动一个位置*/
L->data[i+1] = L->data[i];
}
L->data[k-1] = X;/*插入新元素X*/
L->length++; /*数据元素长度加1*/
return OK;
}
/*删除:
删除表中第k个位置上的元素*/
Status Delete(int k,List L){
int i;
if(L->length == NULL) /*检查线性表L不为空*/
return ERROR;
if(k<1 || k>L->length+1) /*检查删除位置合法性 */
return ERROR;
for(i=k;i<=L->length;i++){/*将删除位置后继元素前移*/
L->data[k-1]=L->data[k];
}
L->length--;/*数据元素长度减小1*/
return OK;
}
线性表的定义与操作--顺序表
最新推荐文章于 2023-10-24 11:50:56 发布