c语言链表的重置,C语言数据结构 |
您所在的位置:网站首页 › c语言实现链表的初始化 › c语言链表的重置,C语言数据结构 |
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 |