用标准C语言初始化线性表,C语言数据结构-顺序线性表的实现-初始化、销毁、长度、查找、前驱、后继、插入、删除、显示操作...

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

{

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; jlength-1; j++)

{

(*L).elem[j] = (*L).elem[j+1];

}

L->length--;

}

//显示线性表全部元素

void TraverList(Sqlist L)

{

printf("线性表中的元素有:");

for(int i=0; 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");

}

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值