c语言链表的重置,C语言数据结构

您所在的位置:网站首页 c语言实现链表的初始化 c语言链表的重置,C语言数据结构

c语言链表的重置,C语言数据结构

2024-07-06 20:02| 来源: 网络整理| 查看: 265

1、数据结构-单链表的实现-C语言

typedef struct LNode

{

int data;

struct LNode* next;

} LNode,*LinkList; //这两者等价。LinkList这样方便理解

void Show_Help();

//初始化线性表

void InitList(LinkList *L);

//销毁线性表

void DestroyList(LinkList *L);

//清空线性表

void ClearList(LinkList *L);

//线性表是否为空

int ListEmpty(LinkList *L);

//线性表长度

int ListLength(LinkList *L);

//线性表查找

void GetElem(LinkList L,int i);

//返回相同元素的位置

void LocateElem(LinkList L,int e);

//求前驱

void PriorElem(LinkList L,int previous);

//求后继

void NextElem(LinkList L,int next);

//插入元素

void ListInsert(LinkList *L,int key,int value);

//删除元素

void ListDelete(LinkList *L,int key);

//显示线性表中元素

void TraverList(LinkList L);

//线性表翻转

//--------------------------------------------------------------------

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("14---演示单链表的并操作\n");

printf("退出,输入一个负数\n");

}

void InitList(LinkList *L)

{

*L = (LNode*) malloc(sizeof(LNode)); //生成头结点,并用L指针指向头结点

if(!(*L)){

printf("分配失败\n");

return ;

}

(*L)->next = NULL;

}

void DestroyList(LinkList *L)

{

//销毁时要从头到尾都删除

LinkList cut;

while(*L){

cut = *L;

*L = (*L)->next;

free(cut);

}

}

void ClearList(LinkList *L)

{

//把除了头结点的其他全删除

LinkList cut=(*L)->next;

LinkList middle;

while(cut){

middle = cut->next;

free(cut);

cut = middle;

}

}

int ListEmpty(LinkList *L)

{

if((*L)->next == NULL)

return 1;

else

return 0;

}

int ListLength(LinkList *L)

{

int num = 0;

LNode* middle = (*L);

while(middle->next){

num++;

middle = middle->next;

}

return num;

}

void GetElem(LinkList L,int i)

{

LinkList middle = L->next;

int key = 1;

int value;

while(middle && key

middle = middle->next;

key++;

}

if(key>i || middle==NULL){

printf("输入范围有误,请重新选择。\n");

return;

}

value = middle->data;

printf("位于第%d个位置的值为:%d\n",i,value);

}

void LocateElem(LinkList L,int value)

{

LinkList middle = L->next;

int key = 0;

int num = 1;

while(middle){

middle = middle->next;

num++;

if(middle->data == value){

key = num;

break;

}

}

if(key)

printf("%d在单链表中下标为%d\n",value,key);

else

printf("%d在单链表中不存在\n",value);

}

void PriorElem(LinkList L,int previous)

{

if(previous == 1){

printf("第一个元素没有前驱,请重新选择。\n");

return;

}

LinkList middle = L->next;

int num = 1;

int value;

while(num

num++;

middle = middle->next;

}

if(middle==NULL || num>(previous-1)){

printf("输入范围有误,请重新选择。\n");

return;

}

value = middle->data;

printf("第%d个位置的前驱为:%d\n",previous,value);

}

void NextElem(LinkList L,int next)

{

LinkList middle = L->next;

int num = 1;

int value;

while(num

num++;

middle = middle->next;

}

if(middle==NULL || num>(next+1)){

printf("输入范围有误,请重新选择。\n");

return;

}

if(num == next){

printf("最后一个元素没有后继,请重新选择。\n");

return;

}

value = middle->data;

printf("第%d个位置的后继为:%d\n",next,value);

}

void ListInsert(LinkList *L,int key,int value)

{

LinkList middle = (*L);

int num = 0;

while(num

num++;

middle = middle->next;

}

if(middle==NULL || num>key-1){

printf("输入范围有误,请重新选择。\n");

return;

}

LinkList insert;

insert = (LNode*) malloc(sizeof(LNode)); //给要插入的结点分配空间

insert->next = middle->next;

insert->data = value;

middle->next = insert;

}

void ListDelete(LinkList *L,int key)

{

LinkList cut = (*L)->next;

int num = 1;

while(num

num++;

cut = cut->next;

}

if(!cut || num>=key){

printf("输入范围有误,请重新选择。\n");

return;

}

LinkList middle = cut->next;

cut->next = middle->next;

free(middle);

}

void TraverList(LinkList L)

{

printf("单链表所有元素有:");

int num = 1;

LinkList value = L->next;

while(value){

printf("%d ",value->data);

value = value->next;

}

printf("\n");

}

void Filp(LinkList* L)

{

LinkList q = (*L)->next;

LinkList p = q->next;

while(p){

q->next = p->next;

p->next = (*L)->next;

(*L)->next = p;

p = q->next;

}

printf("翻转成功\n");

}

标签:单链,C语言,int,void,next,LinkList,middle,printf,数据结构

来源: https://www.cnblogs.com/Fflyqaq/p/10708626.html



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3