#include <stdio.h>
#include <stdlib.h>#define ok 1
#define error -1typedef int ElemType;
typedef int Status;typedef struct Node
{ElemType data;struct Node* next;
}LNode, *LinkList;//构造空表
Status InitList(LinkList  &L)
{L = (LinkList)malloc(sizeof(LNode));L->next = NULL;//头结点指针域为空,则表为空表return ok;
}// 头插法
void CreatList(LinkList &L,int n)
{LNode *p;int i;L->next=NULL;   //先建立一个带有头结点的单链表for(i=n;i>0;--i){p=(LinkList)malloc(sizeof(LNode));    //生成新节点printf("No.%d:",i);scanf_s("%d",&p->data);p->next=L->next;L->next=p;//插到表头}
}//void CreatList(LinkList &L, int n)
//{//  LNode* p, * q;
//  int i = 1;
//  L->next = NULL;//建立一个带头结点的单链表
//  q = L;
//  for (i = 1; i <= n; i++)
//  {//      p = (LinkList)malloc(sizeof(LNode));
//      printf("No.%d:", i);
//      scanf_s("%d", &p->data);
//      p->next = q->next;
//      q->next = p;//新节点插在表尾
//      q = p;
//  }
//}void PrintfList(LinkList L)
{LNode* p;p = L->next;//初始化,p指向第一个结点if (p == NULL)printf("the list is NUll!");while (p != NULL){printf("%d ", p->data);p = p->next;}printf("\n");
}int LengthList(LinkList L)
{LNode* p;int count = 0;p = L->next;while (p != NULL){count++;p = p->next;}return count;
}//清空:是先保留了链表的头,然后把头后面的所有turn count;向下一个的指针设为空,
//这样就相当与清空了,但这个链表还在,还可以继续使用;即保留了头,后面的全部释放。
void CLearList(LinkList &L)//清空链表
{LNode* p, * q;p = L->next;while (p) {q = p->next;free(p);p = q;}L->next = NULL;
}//销毁:是先销毁了链表的头,
//然后接着一个一个的把后面的销毁了,
//这样这个链表就不能再使用了,即把包括头的所有节点全部释放,不能进行任何操作了。
void DestoryList(LinkList &L)//毁坏链表
{LNode* p, * q;/*(*L)->data = 0;*/p = L->next;L->next = NULL;while (p){q = p->next;free(p);p = q;}}Status ListInsert(LinkList L, int i, ElemType e)
{//单链表的第i个位置插入元素eLNode* p, * s;int j = 1;p = L->next;//初始化,p指向第一个结点if (i < 1)return error;//插入位置错while (p && j < i - 1){p = p->next;j++;}s = (LinkList)malloc(sizeof(LNode));s->next = p->next;//插入到L中p->next = s;s->data = e;return ok;
}Status DeleteList(LinkList L, int i, ElemType& e) {// 删除第i个元素,其值返回eint j = 0;LNode* p, * q;p = L;if (i<1 || i>LengthList(L)) {printf("删除的位置异常!!!");return error;}while (p && j < i - 1)//寻找第i个结点,并令p指向其前驱{j++;p = p->next;}if (!p || j > i - 1)return error;//删除位置不合理q = p->next;// q指向待删除节点p->next = q->next;//待删除节点的前驱指向待删除节点的后继e = q->data;// e指向q的数据域free(q);//释放待删除节点return ok;
}Status GetElem(LinkList L, int n, ElemType &e)
{LNode* p;int j = 1;if (n < 1)return error;p = L->next;while (p && j < n){p = p->next;j++;}e = p->data;//printf("the get number is %d\n",*e);return ok;
}void MergeList(LinkList &La,LinkList&Lb, LinkList &Lc)
{//已知单链表La和单链表Lb的元素按照非递减排列//并归La和Lb得到新单线性链表Lc,Lc的元素也按非递减排列LNode *pa = La->next;LNode *pb = Lb->next;LNode* pc;Lc = pc = La;        //用La的头结点作为Lc的头结点while (pa&&pb){if (pa->data<=pb->data){pc->next = pa;pc = pa;pa = pa->next;}else{pc->next = pb;pc = pb;pb = pb->next;}}pc->next = pa ? pa : pb;        //插入剩余片段free(Lb);
}void main()
{LinkList L;int num=1;if (InitList(L) == ok)printf("the LinkList InitList is successful!\n");while (num != 0){system("cls");printf("1.CreatList\t2.PrintfList\t3.LengthList\n");printf("4.ListInsert\t5.DeleteList\t6.GetElem\t\n");printf("7.ClearList\t8.DestoryList\t9.MergeList\t0.Exit\n");printf("enter your choose:");scanf_s("%d", &num);switch (num){case 1:{int i;printf("enter the List Length:");scanf_s("%d", &i);CreatList(L, i);}break;case 2:PrintfList(L);break;case 3:printf("the List length is %d\n", LengthList(L));break;case 4:{ElemType e;int i;printf("enter the position:");scanf_s("%d", &i);printf("enter the number:");scanf_s("%d", &e);if (ListInsert(L, i, e) == ok)PrintfList(L);}break;case 5:{int i;ElemType e;printf("enter the Delete Position:");scanf_s("%d", &i);if (DeleteList(L, i, e) == ok)PrintfList(L);}break;case 6:{int i;ElemType e;printf("enter the want to get number position:");scanf_s("%d", &i);if (GetElem(L, i, e) == ok)//get the list number{printf("the number is found!\n");printf("%d \n", e);}elseprintf("the number is not found!\n");}break;case 7:CLearList(L);printf("the clear is success!\n");break;case 8:DestoryList(L);printf("the destory is success!\n");break;case 9:{LinkList Lb;LinkList Lc;if (InitList(Lb) == ok) {       //初始化Lbprintf("Lb Init success!\n");int i;printf("enter the List Length:");scanf_s("%d", &i);CreatList(Lb, i);                PrintfList(Lb);MergeList(L, Lb, Lc);printf("合并后的链表为:\n");PrintfList(Lc);}elseprintf("Lb Init fail!\n");break;}case 0:printf("byebye");break;default:break;}printf("\n");system("pause");}
}

《数据结构》C语言版 链表的基本操作实现相关推荐

  1. c语言 静态链表插入排序,数据结构C语言版 表插入排序

    西门豹治邺奇计 数据结构C语言版 表插入排序.txt两个人吵架,先说对不起的人,并不是认输了,并不是原谅了.他只是比对方更珍惜这份感情./* 数据结构C语言版 表插入排序 算法10.3 P267-P2 ...

  2. 逆置单链表c语言程序,(数据结构C语言版)顺序表和单链表的逆置

    <(数据结构C语言版)顺序表和单链表的逆置>由会员分享,可在线阅读,更多相关<(数据结构C语言版)顺序表和单链表的逆置(7页珍藏版)>请在人人文库网上搜索. 1.实验1-1顺序 ...

  3. C语言中链表的英文名字,数据结构C语言版 循环链表表示和实现(国外英文).doc

    数据结构C语言版 循环链表表示和实现(国外英文) 数据结构C语言版 循环链表表示和实现(国外英文资料) Data structure, C language, circular list repres ...

  4. 数据结构C语言版(清华大学_唐国民_第3版)单链表

    //数据结构C语言版(清华大学_唐国民_第3版) //单链表功能实现,书 P25 例子2.3.3,与书上代码有些许出入,不用在意,重要的是思路 #include<stdio.h> #inc ...

  5. 数据结构c语言版实验报告2,数据结构(C语言版) 实验报告 (2)

    <数据结构(C语言版) 实验报告 (2)>由会员分享,可在线阅读,更多相关<数据结构(C语言版) 实验报告 (2)(15页珍藏版)>请在人人文库网上搜索. 1.数据结构(C语言 ...

  6. c语言 怎么对百位数求余量,数据结构(C语言版)

    <数据结构(C语言版)>由会员分享,可在线阅读,更多相关<数据结构(C语言版)(52页珍藏版)>请在装配图网上搜索. 1.数据结构(C语言版)第7章图,第7章图,内容 7.1 ...

  7. 数据结构c语言版习题

    数据结构c语言版习题 文章目录 第一章 绪论 第二章 线性表 第四章 串 第五章数组和广义表作业 第六章 树与二叉树理论作业 第七章图作业 第八章查找作业 第一章 绪论 一.选择题 1.以下说法正确的 ...

  8. 数据结构C语言版字符串,数据结构c语言版

    数据结构c语言版是一款非常使用的数据结构课程的编写和教材:它也可将软件作为学习数据结构.算法C程序设计的参数教材,只需要用户学习该软件之后,就算遇到在繁杂的代码也可以清晰的写出来,本书的钱半部分主要介 ...

  9. 数据结构c语言程序题,严蔚敏《数据结构(c语言版)习题集》(包括基础部分).doc...

    严蔚敏<数据结构(c语言版)习题集>(包括基础部分).doc 线性表第1章绪论11简述下列术语数据,数据元素.数据对象.数据结构.存储结构.数据类型和抽象数据类型.解数据是对客观事物的符号 ...

最新文章

  1. 搜狗CEO王小川:AI领域存在泡沫 但留下的是珍珠
  2. linux 内核 file_operations结构体各项解析
  3. 陈老师Linux内核进程管理导学
  4. java做一个客房管理系统定制_Java实现酒店客房管理系统
  5. 官宣|Apache Flink 1.13.0 正式发布,流处理应用更加简单高效!
  6. Unity3d(UE4)动态加载osgb倾斜摄影数据
  7. 马凯军201771010116《面向对象程序设计(java)》第二周学习总结
  8. datatable的数据进行组内排序_排序算法学习分享(四)希尔排序
  9. MFC- OnIdle空闲处理
  10. 快速搭建react项目骨架(按需加载、redux、axios、项目级目录等等)
  11. 【韩顺平 零基础30天学会Java】(第三阶段)(自用)
  12. SReng日志扫描动画教程
  13. word文档如何插入目录
  14. 如何书写论文中的参考文献并正确标注页码
  15. 电脑技巧:原版Windows系统与Ghost系统的区别
  16. 如何应对云安全技术遇到的挑战?可从这三点入手
  17. 奶牛家族(斐波那契数列的快速幂乘矩阵算法)
  18. 穿越NAT的SDWAN技术实现(上)
  19. 【生物信息】ESTIMATE 分析免疫评分和肿瘤纯度
  20. Symfony3 检查用户操作权限

热门文章

  1. 阿里点赞立法惩治刷单炒信:坚决拥护、全力支持
  2. P1457 城堡 The Castle(DFS+染色)
  3. 快讯丨用于zData一体机的两款服务器率先通过3C认证
  4. 亚信大数据平台产品经理 杨晋:大数据是怎么应用于技术方面的
  5. XSSF - Cross Site Scripting Framework
  6. 二叉树基本知识点图文介绍(全网最简洁)
  7. 各品牌手机音视频格式支持一览表收藏
  8. 线性判别分析(LDA),二次判别分析(QDA)和正则判别分析(RDA)
  9. echart雷达图详细配置
  10. 一箭穿心——两颗心紧紧相连(Python代码实现)