#include<stdio.h>
#include<stdlib.h>
#define LIST_INIT_SIZE 100
#define LISTINNCREMENT 10
#define ERROR 0
#define OK 1
#define OVERFLOW -2
typedef int ElemType;
typedef int Status;
typedef struct{
ElemType *elem; //存储空间地址
int length; //当前长度
int listsize; //当前分配的存储容量
}SqList;
Status InitList_Sq(SqList &L){
L.elem = (ElemType *)malloc(sizeof(ElemType) * LIST_INIT_SIZE);
if(!L.elem)exit(OVERFLOW);
L.length = 0;
L.listsize = LIST_INIT_SIZE;
return OK;
}
Status ListInsert_Sq(SqList &L, int i, ElemType e){
if(i < 1 || i > L.length+1)return ERROR; //i值不合法
if(L.length >= L.listsize){ //当前存储空间已满,请重新分配
ElemType *newbase = (ElemType * )realloc(L.elem, (L.listsize+LISTINNCREMENT) * sizeof(ElemType));
if(!newbase)exit(OVERFLOW);
L.elem = newbase;
L.listsize += LISTINNCREMENT;
}
ElemType *q = &(L.elem[i-1]);;
ElemType *p;
for(p = &(L.elem[L.length-1]); p >= q; p--) {
*(p+1) = *p;
}
*q = e;
L.length++;
return OK;
}
Status ListDelete_Sq(SqList &L, int i, ElemType &e){
if(i < 1 || i > L.length) return ERROR;
ElemType *p = &(L.elem[i-1]);
e = *p;
ElemType *q = L.elem + L.length - 1;
for(p++; p <= q; p++) *(p-1) = *p;
L.length--;
return OK;
}
Status GetElem_Sq(SqList &L, int i, ElemType &e){
if (i < 1 || i > L.length) return ERROR;
ElemType *p = &L.elem[i-1];
e = *p;
printf("%d\n", e);
return OK;
}
Status LocateElem_Sq(SqList &L, ElemType e){
for(int i = 0; i < L.length; i++){
if(L.elem[i] == e){
printf("%d的位序是%d\t", e, i+1);
}
}
return OK;
}
int main(){
SqList L; //定义一个空表
InitList_Sq(L); //对表进行初始化
for ( int i = 0; i < 9; i++) //向表中添加数据
L.elem[i] = i;
L.length = 9;
ListInsert_Sq(L, 3, 25); //在已有的数据中进行指定位序插入数据
for (int i = 0; i < L.length; i++)
printf("data[%d]=%d ", i, L.elem[i]);
printf("\n\n");
int e; //定义数据删除后的返回值
ListDelete_Sq(L, 2, e); //删除指定位序的数据
for (int i = 0; i < L.length; i++)
printf("data[%d]=%d ", i, L.elem[i]);
printf("\n\n");
int k; //定义数据查询后的返回值
GetElem_Sq(L, 2, k); //查询指定位序的数据
printf("\n");
LocateElem_Sq(L, 25); //找出指定数据的位序
printf("\n\n");
return 0;
}
C/C++数据结构线性表入门集
最新推荐文章于 2024-07-20 11:22:21 发布