介绍:

1、构造一个长为n的线性表,插入元素为逆序插入

2、构造一个长为n的线性表,插入元素为顺序插入

3、销毁链表L

4、查找L的第i个元素,并用e返回

5、查找L中第一个与e满足compare关系的元素,若存在返回其对应位置,否则返回error

6、若cur_e是L中的元素,且不是第一个,则返回其前驱元素

7、若cur_e是L中的元素,且不是最后一个,返回其对应后继元素

8、在L的第i个位置插入元素e

9、删除L的第i个元素

链表结构的实现:

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <assert.h>typedef int Elemtype;
typedef int Status;
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OVERFLOW -1typedef struct Node
{Elemtype data;struct Node * next;
}LinkNode,*LinkList;/*
构造一个空的线性表
*/
Status InitList(LinkList &L)
{L=(LinkList)malloc(sizeof(LinkNode));if(!L){printf("L failed");return ERROR;}L->next=NULL;return OK;
}/*
构造一个长为n的线性表,插入元素为逆序插入
*/
Status ListCreate_Invert(LinkList &L,const int n)
{int i;InitList(L);LinkList p;for(i=0;i<n;i++){p=(LinkList)malloc(sizeof(LinkNode));if(!p){printf("p failed ");return ERROR;}scanf("%d", &p->data);p->next=L->next;L->next=p;}return OK;
}/*
构造一个长为n的线性表,插入元素为顺序插入
*/
Status ListCreate_Sequence(LinkList &L,const int n)
{int i;InitList(L);LinkList p,q=L;for(i=0;i<n;i++){p=(LinkList)malloc(sizeof(LinkNode));if(!p){printf("p failed ");return ERROR;}scanf("%d", &p->data);q->next=p;q=p;}q->next=NULL;return OK;
}/*
销毁线性表L
*/
Status DestroyList(LinkList &L)
{LinkList p=L->next,q;free(L);while(p){q=p->next;free(p);p=q;}return OK;
}/*
将L重置为空表
*/
Status ClearList(LinkList &L)
{LinkList p=L->next,q;while(p){q=p->next;free(p);p=q;}L->next=NULL;return OK;
}/*
判断L是否为空,空返回True,否则返回False
*/
Status EmptyList(const LinkList L)
{if(L->next==NULL)return TRUE;elsereturn FALSE;
}/*
返回L的长度
*/
Status ListLength(const LinkList L)
{LinkList p=L;int length=0;while(p->next){++length;p=p->next;}return length;
}/*
查找L的第i个元素,并用e返回
*/
Status GetElem(const LinkList L,int i,Elemtype &e)
{assert(i>0);int j=0;LinkList p=L;while (j<i&&p){++j;p=p->next;}if(p==NULL||j>i){printf("there aren't %d elements is the linklist\n", i);return FALSE;}e=p->data;return OK;
}/*
查找L中第一个与e满足compare关系的元素,若存在返回其对应位置,否则返回error
*/
Status LocateElem(const LinkList L,Elemtype e,Status (*compare)(Elemtype,Elemtype))
{LinkList p=L->next;int pos=1;while(p){if(compare(e,p->data)==1)return pos;else{pos++;p=p->next;}}if(p==NULL){printf("no element has the compare relation with %d \n", e);return FALSE;}
}//若cur_e是L中的元素,且不是第一个,则返回其前驱元素
Status PriorElem(const LinkList L,Elemtype cur_e,Elemtype &pre_e)
{int pos=1;LinkList p=L;while (p->next&&p->next->data!=cur_e){p=p->next;pos++;}if(pos!=1)        //不是第一个结点{pre_e=p->data;return OK;}else{printf("%d is  the first element of linklist\n", cur_e);return ERROR;}
}//若cur_e是L中的元素,且不是最后一个,返回其对应后继元素
Status NextElem(const LinkList L,Elemtype cur_e,Elemtype &next_e)
{int pos=1;LinkList p=L->next;while(p&&p->data!=cur_e){    p=p->next;pos++;}if(p->next!=NULL){next_e=p->next->data;return OK;}else{printf("%d is the last element of linklist\n", cur_e);return ERROR;}
}//在L的第i个位置插入元素e
Status InsertList(LinkList &L,int i,Elemtype e)
{assert(i>0);LinkList p=L->next;int j=1;while(p&&j<i-1){p=p->next;++j;}LinkList s=(LinkList)malloc(sizeof(LinkNode));s->data=e;s->next=p->next;p->next=s;return OK;
}/*
删除L的第i个元素
*/
Status DeleteList(LinkList &L,int i,Elemtype &e)
{assert(i>0);LinkList p=L->next;int j=1;while(p->next&&j<i-1){p=p->next;j++;}LinkList q=p->next;p->next=q->next;e=q->data;free(q);return OK;
}/*
对L中的每一个元素调用visit函数
*/
Status TraverseList(const LinkList L,void(*visit)(Elemtype))
{LinkList p;p=L->next;while(p){visit(p->data);p=p->next;}return OK;
}void visit(Elemtype e)
{printf("%-5d", e);
}

测试代码:

//测试代码
int main()
{LinkList L;int n;LinkNode *p,*emin,*emax;printf("请输入要要输入的元素个数:");scanf("%d", &n);ListCreate_Sequence(L, n);printf("原序链表值:\n");p = L->next;while(p){printf("%d ", p->data);p = p->next;}printf("\n");p = L;int ce, pe;printf("请输入要查找前驱和后继的元素:");scanf("%d", &ce);PriorElem(L, ce, pe);printf("%d的前驱是%d\n", ce, pe);NextElem(L, ce, pe);printf("%d的后继是%d\n", ce, pe); printf("请输入要插入的元素和插入位置:");scanf("%d%d", &ce,&pe);InsertList(L, pe,ce);printf("插入元素%d后的线性表为\n", ce);TraverseList(L, visit);puts("");printf("请输入要删除元素位置:");scanf("%d", &ce);DeleteList(L, ce, pe);printf("删除%d位置的元素后的线性表为\n", ce);TraverseList(L, visit);puts("");DestroyList(L);return 0;
}

运行结果:

数据结构(严蔚敏)之二——链表的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. 阅读笔记-数据结构(C语言)-严蔚敏老师-单链表

    这里创建单链表都是指定长度进行创建的,之后会补上动态创建. 单链表 一.头插法创建单链表(p30) 二.尾插法创建单链表 三.按索引查找和按值查找 四.插入到第几个节点之后 五.删除节点 一.头插法创 ...

  6. 数据结构----严蔚敏

    最近一直想找一本纯数据结构的书来学习,找来找去都没有找到一本合适的书籍,相比之下国内的书籍之中,严蔚敏和吴伟民的还算是经典版了,很多国内其他数据结构教材都参考这本书的.但缺点是很多都是伪代码,对编程初 ...

  7. 数据结构严蔚敏清华大学pdf_2019年清华大学自动化系控制工程专业大数据方向考研经验分享...

    基本情况(以下内容仅代表个人观点) 我目前就读于西南某双非石油工程专业,2019考研报考清华大学自动化系大数据工程专业,一志愿复试被刷,侥幸调剂录取至微电子系.初试总分346分(政治-63 + 英语一 ...

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

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

  9. 单链表C/C++实现(数据结构严蔚敏)

    下面是项目:头文件.源文件.测试文件 1.头文件LinkList.h: #include<iostream> #include<malloc.h> using namespac ...

最新文章

  1. 【 MATLAB 】ppval 函数介绍(评估分段多项式)
  2. 设计模式复习-访问者模式
  3. 手动构建磁贴服务器(16.04.2 LTS)
  4. Socket常用语法与socketserver实例
  5. linux按日期备份mysql,在Linux、Windows上如何按日期逻辑备份数据库
  6. JavaScript 编程精解 中文第三版 十五、处理事件
  7. 相机模型与标定(十)--RANSAC算法
  8. JSP中request内置对象
  9. 制作chrome插件教程
  10. 目标检测回归损失函数总结
  11. PDF翻译神器,再也不担心读不懂英文Paper了
  12. 英语面试:应聘原因篇(转)
  13. 100行代码做一个周杰伦歌词生成器--python
  14. 微信支付商户证书cert.zip中缺少rootca.pem文件解决方法
  15. Typora+图床详解(小白都能学得会)
  16. 盖茨基金会宣布全球目标守卫者奖得主,并发布两项创新伙伴关系
  17. pool win10提示bad_Win10系统出现bad pool header蓝屏怎么办?
  18. 一文读懂物联网 MQTT 协议之实战篇
  19. 匿名科创地面站v4.08
  20. Android定制化自己的开锁界面

热门文章

  1. 你会怎样衡量你的产品? —— 一点产品数据分析的经验分享
  2. Worktile:DNA中带有“效率”精神的协同软件企业
  3. Disjoint Set
  4. NLPIR智能语义:大数据精准挖掘是信息化发展趋势
  5. MySQL用户管理及SQL入门
  6. Node.js Promise.all 限制并发数量
  7. 自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  8. 自定义webview,根据网页大小确定webview大小
  9. 删除vs中最近的项目的方法
  10. ECshop中defined('IN_ECS')的实现原理