1、数据结构-顺序线性表的实现-C语言
#define MAXSIZE 100
//结构体定义
typedef struct
{
int *elem; //基地址
int length; //结构体当前长度
int listsize; //结构体最大长度
} Sqlist; //结构体类型名
//各项操作
void Show_Help()
{
printf("1---初始化线性表\n");
printf("2---销毁线性表\n");
printf("3---清空线性表\n");
printf("4---判断线性表是否为空\n");
printf("5---求线性表长度\n");
printf("6---获取线性表某位置元素\n");
printf("7---请输入元素的值,判断其在线性表中是否存在,并返回其下标,不存在则返回0\n");
printf("8---求直接前驱\n");
printf("9---求直接后继\n");
printf("10---在线性表指定位置插入元素\n");
printf("11---删除线性表指定位置元素\n");
printf("12---显示线性表全部元素\n");
printf("13---翻转线性表全部元素\n");
printf("退出,输入一个负数\n");
}
//初始化线性表
void InitList(Sqlist* L)
{
L->elem = (int*) malloc(MAXSIZE*sizeof(int)); //给线性表分配初始空间
if(!(L->elem)){
printf("分配失败\n");
return ;
}
L->length = 0;
L->listsize = MAXSIZE;
}
//销毁线性表
void DestroyList(Sqlist* L)
{
if(L->elem)
free(L->elem); //销毁只需释放刚才给基地址分配的空间即可
L->length = 0;
}
//清空线性表
void ClearList(Sqlist* L)
{
L->length = 0;
}
//判断线性表是否为空
int ListEmpty(Sqlist L)
{
if(L.length)
return 0;
else
return 1;
}
//求线性表长度
int ListLength(Sqlist L)
{
return L.length;
}
//获取线性表某位置元素
void GetElem(Sqlist L,int i,int* e)
{
e = L.elem[i-1];
}
//请输入元素的值,判断其在线性表中是否存在,并返回其下标,不存在则返回0
int LocateElem(Sqlist L,int e)
{
int position = 0;
for(int i=0; i<L.length; i++)
{
if(L.elem[i] == e)
{
position = i+1;
break;
}
}
return position;
}
//求直接前驱
void PriorElem(Sqlist L,int cur_e,int* pre_e)
{
pre_e = L.elem[cur_e-2];
}
//求直接后继
void NextElem(Sqlist L,int cur_e,int* next_e)
{
next_e = L.elem[cur_e];
}
//在线性表指定位置插入元素
void ListInsert(Sqlist* L,int i,int e)
{
for(int j=L->length; j>=i; j--)
{
L->elem[j] = L->elem[j-1];
}
L->elem[i-1] = e;
L->length++;
}
//删除线性表指定位置元素
void ListDelete(Sqlist* L,int i)
{
for(int j=i-1; j<L->length-1; j++)
{
(*L).elem[j] = (*L).elem[j+1];
}
L->length--;
}
//显示线性表全部元素
void TraverList(Sqlist L)
{
printf("线性表中的元素有:");
for(int i=0; i<L.length; i++)
{
printf("%d ",L.elem[i]);
}
printf("\n");
}
//翻转线性表全部元素
void Flip(Sqlist L)
{
int num = L.length / 2;
int* begin = &L.elem[num-1];
int* end = &L.elem[L.length-num];
int middle;
while(num)
{
middle = *begin;
*begin = *end;
*end = middle;
num--;
begin = &L.elem[num-1];
end = &L.elem[L.length-num];
}
printf("翻转成功\n");
}
欢迎转载,转载请标明出处哦