#include<stdlib.h>
#include<stdio.h>

typedef struct LNode {
    int data;
    struct LNode* next;
}LNode,*LinkList;

LinkList CreateLinkList(LinkList L);           //创建单链表,并返回头指针
int GetElemLinkList(LinkList L, int *e);    //查找单链表第i位在值,并返回给e
int InsertLinkList(LinkList L, int i, int e);     //在第i个位置插入e值
int DeleteLinkList(LinkList L, int i, int* e);     //删除第i个位置的元素,把删除的值返给e
int UpdateLinkList(LinkList L);     //改变数据 ,先增加再删除。
void print(LinkList L);      //遍历单链表

void main()
{
    LinkList LHead=NULL;   //头结点为空
    int a = 0;
    LHead=CreateLinkList(LHead);
    //a = GetElemLinkList(LHead,&a);
    //a = DeleteLinkList(LHead,2 , &a);
    //InsertLinkList(LHead, 2,2);
    //UpdateLinkList(LHead);
    
    print(LHead);
    return;
}

LinkList CreateLinkList(LinkList L)    //创建有头结点的单链表,长度为n ,从末尾开始插入数据
{
    LinkList p;
    int i;
    int length;
    L = (LinkList)malloc(sizeof(LNode));
    L->next = NULL;
    printf("请输入单链表的长度");
    scanf("%d", &length);
    for(i=length;i>0;--i)
    {
        printf("请输入第%d位元素  ",i);
        p = (LinkList)malloc(sizeof(LNode));   //生成新结点
        scanf("%d", &p->data);
        p->next = L->next; L->next = p;    //插入到表头
    }
    return L->next;
}

void print(LinkList L) //遍历数据显示元素,从第一个元素开始,正历。
{
    LinkList p = L;
    while (p!=NULL)
    {
        printf("%2d", p->data);
        p = p->next;
    }
    return;
}

int GetElemLinkList(LinkList L, int* e)
{
    LinkList p = L; 
    int i;
    int j = 1;
    printf("请输入第i个位置  ");
    scanf("%d", &i);
    while (p && j < i)
    {
        p = p->next; ++j;
    }
    if (!p || j > i)
    {
        return -1;
    }
    *e = p->data;
    printf("第%d个元素是%2d",i,*e);
    return *e;
}

int InsertLinkList(LinkList L, int i, int e)   
{
    LinkList p = L; int j = 1;

while (p && j < i - 1)
    {
        p = p->next; ++j;     //寻找第i-1个结点
    }
    if (!p || j > i - 1) return -1;
    LinkList s = (LinkList)malloc(sizeof(LNode));
    s->data = e;
    s->next = p->next; p->next = s;
    return 1;
}

int DeleteLinkList(LinkList L, int i, int* e)
{
    LinkList p = L;int j = 1;
    //LinkList q = L;
    while (p->next && j < i-1 )    //寻找第i个结点,并令p指向其前趋
    {
        p = p->next; ++j;
    }
    if (!(p->next) || j > i-1)
    {
        printf("删除位置不合理");
        return -1;
    }
    /*q = p->next; p->next = q->next;
    *e = q->data;*/
    *e = p->next->data;
    p->next = p->next->next;
    printf("被删除的是第%d个元素%d  ", i, *e);
    return *e;
    
}

int UpdateLinkList(LinkList L)     
{
    int i,val;
    printf("请输入修改的第i个位置");
    scanf("%d", &i);
    //==DeleteLinkList(L,2,2)
    printf("请输入修改的值为");
    scanf("%d", &val);
    InsertLinkList(L, i, val);
    DeleteLinkList(L, i+1, &i);
    return 1;

}

单链表的实现 (C语言版 数据结构 严蔚敏)相关推荐

  1. 数据结构(C语言版)严蔚敏 吴伟民 编著 第1章 绪论

    数据结构(C语言版)严蔚敏 吴伟民 编著 第1章 绪论 1.1 什么是数据结构? 1.2 基本概念和术语 1.3 抽象数据类型的表示与实现 1.4 算法和算法分析 1.4.1 算法 1.4.2 算法设 ...

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

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

  3. 【数据结构】01-绪论《数据结构 C语言版(严蔚敏、吴伟民)》

    文章目录 教材 > 第1章 绪论 1.1 什么是数据结构 1.2 基本概念和术语 1.3 抽象数据类型的表示与实现 1.4 算法和算法分析 习题集 > 第1章 二.算法设计题 附 > ...

  4. 《数据结构》C语言版 (清华严蔚敏版)详解

    关键字定义     1.数据 数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合.     2.数据元素 数据元素:是组成数据的.有一定意义的基本单位 ...

  5. 《数据结构》C语言版(严蔚敏)——绪论(一)

    目录 数据结构的研究内容 基本概念和术语 数据结构 数据类型和抽象数据类型 算法和算法分析 数据结构的研究内容 寻求数学模型的实质是分析问题,建立相应的数学方程: 数据结构主要研究==非数值问题 == ...

  6. c语言逻辑代数常用公式证明,《数据结构C语言版》严蔚敏第二章逻辑代数基础...

    第二章逻辑代数基础,数字电路,1.2.1逻辑代数与基本逻辑关系,在数字电路中,我们要研究的是电路的输入输出之间的逻辑关系,所以数字电路又称逻辑电路,相应的研究工具是逻辑代数(布尔代数).,在逻辑代数中 ...

  7. Θ(n)反转单链表(算法导论第三版第十章10.2-7)

    Θ(n)反转单链表 (算法导论第三版第十章10.2-7) template<typename T> void reverses(Single_L<T> &l) {if( ...

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

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

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

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

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

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

最新文章

  1. 请教一个算法问题,有两个数组A,B,判断A中是否至少有一个元素和B中元素相同...
  2. 韩国文档的编码方式_像韩国学生学习英语一样学习编码
  3. C linux 宏定义的使用
  4. TinyDBCluster Vs routing4db
  5. Android Studio 插件开发详解二:工具类
  6. Dockerfile指令详解:WORKDIR 指定工作目录
  7. Python延迟打印字符
  8. webpack之externals操作三部曲--正确的姿势
  9. 信息学奥赛一本通 1188:菲波那契数列(2) | OpenJudge NOI 2.3 1760:菲波那契数列(2)
  10. Microsoft Visual Studio .NET 2003 编译xvidcore-1.1.3
  11. 三步解决error: Microsoft Visual C++ 14.0 or greater is required. Get it with “Microsoft C++ Build Tools“
  12. 学习mysql比较好一些书籍
  13. 设置图片的透明度从左到右渐变
  14. python远程调用摄像头_教你如何利用python调用摄像头
  15. python初体验-hello world答案_Python初体验(一)—【配置环境变量】【变量】【input】【条件语句】【循环语句】...
  16. APK脱壳之—如何脱掉“梆梆加固”的保护壳
  17. 华为开发者大会主题演讲:3D建模服务让内容高效生产
  18. 【数据结构】先序遍历+中序遍历创建二叉树(C++实现)
  19. python导入库的简便方法
  20. 新视野大学英语(第三版)视听说4答案

热门文章

  1. 人力资源管理教程 HR自学视频教程
  2. Ehr人力资源系统和HRsaas系统有什么区别?
  3. java实现一个电子书下载系统
  4. windows10 显示实时网速
  5. 合肥师范学院计算机组成原理实验,计算机组成原理实验教学探索
  6. sap不用oracle数据库库,SAP系统安装之Oracle 10g数据库(Win3264)
  7. 新塘单片机烧写器_NuMicro ICP Programming Tool-ICP Programming Tool(新唐单片机烧录工具)下载 v3.00.6909官方版--pc6下载站...
  8. CC2530 串口通信
  9. Axure元件库web组件库典藏版 (含五大类159小类组件 )
  10. cop2000计算机组成原理,COP2000计算机组成原理实验系统.pdf