下面是项目:头文件、源文件、测试文件

1、头文件LinkList.h:

#include<iostream>
#include<malloc.h>
using namespace std;#define ok 1
#define error 0
#define flow 0typedef int Status;
typedef int ElemType;typedef struct LNode{ElemType data;struct LNode* next;}LNode;
typedef LNode* LinkList;//初始化链表
Status InitList( LinkList& L, int n);//销毁链表
Status DestroyList(LinkList& list);//打印链表
Status Print(const LinkList& L); //在第i个位置前添加数据节点
Status ListInsert( LinkList& L, int i, ElemType e) ;//删除第i个位置的节点
Status ListDelete( LinkList& L, int i, ElemType& e);//获取链表的第i个位置数据,并返回
Status Get( const LinkList& L, int i, ElemType& e);//将递增的LA和LB进行归并,重新放入LC中
Status MergeList( LinkList& La,   LinkList& Lb, LinkList& Lc); 

2、源文件LinkList.cpp

#include "LinkList.h"//使用头节点反序初始化链表
Status InitList( LinkList& L, int n){L = (LinkList)(malloc( n * sizeof(LNode)));if(!L) return error;L->next = NULL;cout<<"请输入"<<n<<"个数据节点的数据\n"<<endl;for(int i=0;  i < n; i++){LinkList p = (LinkList)(malloc(sizeof(LNode)));cin>>p->data;p->next = L->next;L->next = p;}return ok;
}//打印链表 ,由于初始化是按照头指针进行的,所以打印出来的是倒叙链表
Status Print(const LinkList& L){LinkList p = L->next;if(!p) return error;while(p){cout<<p->data<<" ";p=p->next;    }cout<<endl;return ok;
}//销毁链表
Status DestroyList( LinkList& L){}//在第i个位置前添加数据节点
Status ListInsert(LinkList& L, int i, ElemType e){LinkList p = L;int j = 0;//找到第i-1个节点的地址放入p中 while(p && j < i-1){p = p->next; j++;}//第i-1个节点不存在,无法将数据e插入到第i个位置上 ,或则输入的位置小于1。返回错误。 if(!p || j > i-1) return error;//新建一个节点 LinkList s = (LinkList)malloc((sizeof(LNode)));//新建节点的数据部分是e s->data = e;//新建节点的指针域是第i个节点的地址。而第i位置的地址存储在第i-1中的指针域 p->next中中;s->next = p->next;//将第-1的指针域修改为新建节点的地址,就是s。使得第i-1的节点指针域指向新建节点 p->next = s;return ok;}//删除第i个位置的节点
Status ListDelete( LinkList& L, int i, ElemType& e){LinkList p = L;int j = 0;//寻找第i个节点的地址,放入p的指针域p->next中,p是第i-1位置的节点 while(p->next && j < i-1){p = p->next;j++;}//如果第i位置节点不存在,就返回错误 if(!(p->next) || j < i-1) return error;//让第i-1位置的p节点的指针域p->next指向第i+1位置的节点,然后释放第i位置的空间。 LinkList q = p->next;p->next = q->next;e = q->data;free(q);
}//获取链表的第i个位置数据,并返回
Status Get(const LinkList L, int i, ElemType& e){//L为头节点的地址,L->next存储的是第一个节点的地址,L->data,不存储数据。 //获取第一个节点的地址,并将计数器设置为1 LinkList p = L->next;int j = 1;//循环遍历节点 while(p && j < i){p = p->next; j++;}//如果节点的地址为NULL,或则查看的节点数大于 计数器一开始就大于了i, 说明第i个位置的数据不存在,返回错误0 if(!p || j > i){return error;}//如果存在,就赋值给e e = p->data;return ok;
}//将递增的LA和LB进行归并,重新放入LC中
Status MergeList( LinkList& La,  LinkList& Lb, LinkList& Lc){//将La和Lb的第一个数据节点的地址赋值给pa, pb LinkList pa = La->next;LinkList pb = Lb->next;Lc = (LinkList)malloc(sizeof(LNode));Lc->next = NULL; LinkList pc = NULL;int i = 1;int j = 1;//如果La第一个节点的数据大于Lb的第一个数据节点,就将Lb的数据存到Lc中 while(pa && pb){    if(pa->data <= pb->data){pc = (LinkList)malloc(sizeof(LNode));   pc->data = pa->data;pc->next = Lc->next;Lc->next = pc;pa = pa->next;}else{pc = (LinkList)malloc(sizeof(LNode));  pc->data = pa->data;pc->next =  Lc->next;Lc->next = pc;pb= pb->next;} }while(pa){pc = (LinkList)malloc(sizeof(LNode));pc->next = Lc->next;Lc->next = pc;pc->data = pa->data;pa = pa->next;}while(pb){pc = (LinkList)malloc(sizeof(LNode));pc->next =  Lc->next;Lc->next = pc;pc->data = pb->data;pb = pb->next;}}

3、测试文件:test.cpp

#include<iostream>
#include "LinkList.h"
using namespace std;int main(void){LinkList La, Lb, Lc;ElemType e;int i, n ; InitList(La, 4);cout<<"链表创建完毕"<<endl;InitList(Lb, 4);cout<<"链表创建完毕"<<endl;MergeList(La, Lb, Lc);Print(Lc);return 0;
}

单链表C/C++实现(数据结构严蔚敏)相关推荐

  1. 数据结构 严蔚敏 第二章 线性表

    数据结构 严蔚敏 第二章 线性表 线性表:由n个(n>=0)数据特征相同的元素构成的有限序列. 线性表的类型定义表示和实现 顺序表 存储单元地址连续 随机存取 若每个元素占用 m 个存储单元,以 ...

  2. 构建线性表的c语言代码,数据结构严蔚敏C语言版—线性表顺序存储结构(顺序表)C语言实现相关代码...

    1.运行环境 这里说明一下这里所有的C语言代码都是基于code::blocks 20.03编译运行的.当然一些其他集成开发环境应该也是可以的,个人不太喜欢功能太过强大的IDE,因为那同样意味着相关设置 ...

  3. 【计算机】数据结构-严蔚敏/清华大学P3

    [计算机]数据结构-严蔚敏/清华大学P1 第二章    线  性表 线性结构 是 一个数据元素的有序(次序)集 线性结构的基本特征: 1.  集合中必存在唯一的一个"第一元素": ...

  4. 数据结构严蔚敏C语言版—线性表顺序存储结构(顺序表)C语言实现相关代码

    数据结构严蔚敏C语言版-线性表顺序存储结构(顺序表)C语言实现相关代码 1.运行环境 2.准备工作 1)项目构建 1>新建一个SeqList项目 2>新建两个文件Sources和Heade ...

  5. 数据结构----严蔚敏 (链表)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.链表是什么? 二.使用步骤 总结 前言 数据结构是软件技术.网络技术等计算机类专业的一门重要的专业基础课程,其理论 ...

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

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

  7. C语言单链表实现FCFS算法,数据结构与算法复习题(含答案).doc

    <数据结构与算法>2015-2016学年第1学期考试复习题 选择题(下面各小题有一个正确答案,请将正确答案的编号填写在各小题的括号内). 1.在一棵具有5层的满二叉树中结点总数为( A ) ...

  8. 数据结构--单链表single linked list数据结构C++实现

    2018年2月开始学习的 C++ Primer,到今天2019年3月已经整整一年了,非常感谢在一起交流的小伙伴,是你们的无私帮助和分享使得我能跨越很多技术的坑,感谢你们!期待我们2019年一起拿下&l ...

  9. java单链表节点翻转_Java数据结构01-链表基础(讲解+代码+面试题)

    文章结构 链表的概念/用处 链表的基本代码实现(韩顺平Java数据结构网课) 剑指offer上链表题目代码实现(个人手敲,更精巧的答案可以参考官网) 链表 链表包含单链表,双向链表,循环链表等等.相对 ...

  10. python实现单链表快速排序升序linkedqueue_数据结构回顾

    顺序结构 顺序栈(Sequence Stack) 1 2 3 4 5 6typedef struct { ElemType *elem; int top; int size; int incremen ...

最新文章

  1. XamarinAndroid组件教程RecylerView适配器设置动画
  2. python的userlist_Python Collections.UserList用法及代码示例
  3. git版本库--常用命令
  4. java堆栈信息查看,以及JVM性能查看工具-jconsole+jmap
  5. 20200920:leetcode35周双周赛题解(上)
  6. python怎么七个数字一换行_python中怎么换行?
  7. 硬件编解码与软件编解码的区别
  8. 阿帕网几台大型计算机网络,阿帕网-互联网的鼻祖(中) | 午夜猫
  9. JsPlumb获取线数据
  10. 线程安全,线程同步,解决线程同步问题
  11. 【Java基础】入门
  12. Linux中修改用户UID和组GID的方法
  13. android 刘海机型适配,Android全面屏刘海适配
  14. Python Pyside2 Pinger新手QQ音乐网易云酷狗爬虫下载
  15. 警告关于测试人员的职场生存,千万要避开这5个坑(不看后悔)
  16. 仿腾讯手机管家火箭发射案例
  17. 支付宝怎么做风险控制?
  18. 积分与通证有什么区别?什么是TZC积分通证?
  19. 七牛云 上传图片到七牛云并返回图片URL
  20. java毕设项目开源了,springboot+bootstrap的仿天猫商城系统

热门文章

  1. 1355. 母亲的牛奶【一般 / DFS爆搜】
  2. visual studio创建项目时需要注意的问题
  3. java的准动态(反射)
  4. Spring boot定制错误json数据
  5. Keepalived安装
  6. MySQL带IN关键字的子查询
  7. jaccard相似度_Jaccard与cosine文本相似度的异同
  8. 同事写了一个update,误用一个双引号,生产数据全变0了!
  9. C连接MySQL数据库开发之Windows环境配置及测试
  10. SpringMVC控制器接收不了PUT提交的参数的解决方案