/*首先设计测试函数,可以涉及初始化线性表、销毁线性表、输出线性表、插入数据元素对应的函数*/
#include <stdio.h>
#include <malloc.h>
typedef int ElemType;
typedef struct LNode        //定义单链表结点类型
{ElemType data;struct LNode *next;     //指向后继结点
}LinkList;/*
void CreateListF(LinkList *&L,ElemType a[],int n);//头插法建立单链表
void CreateListR(LinkList *&L,ElemType a[],int n);//尾插法建立单链表
void InitList(LinkList *&L);  //初始化线性表
void DestroyList(LinkList *&L);  //销毁线性表
bool ListEmpty(LinkList *L);  //判断线性表是否为空
int ListLength(LinkList *L);  //求线性表长度
void DispList(LinkList *L);  //输出线性表
bool GetElem(LinkList *L,int i,ElemType &e);  //求线性表某个数据元素值
int LocateElem(LinkList *L,ElemType e);  //按元素值查找
bool ListInsert(LinkList *&L,int i,ElemType e);  //插入数据元素
bool ListDelete(LinkList *&L,int i,ElemType &e);  //删除数据元素*/
void CreateListF(LinkList *&L,ElemType a[],int n)//头插法建立单链表
{LinkList *s;int i;L=(LinkList *)malloc(sizeof(LinkList));     //创建头结点L->next=NULL;for (i=0; i<n; i++){s=(LinkList *)malloc(sizeof(LinkList));//创建新结点s->data=a[i];s->next=L->next;            //将*s插在原开始结点之前,头结点之后L->next=s;}
}
void CreateListR(LinkList *&L,ElemType a[],int n)//尾插法建立单链表
{LinkList *s,*r;int i;L=(LinkList *)malloc(sizeof(LinkList));     //创建头结点L->next=NULL;r=L;                    //r始终指向终端结点,开始时指向头结点for (i=0; i<n; i++){s=(LinkList *)malloc(sizeof(LinkList));//创建新结点s->data=a[i];r->next=s;          //将*s插入*r之后r=s;}r->next=NULL;           //终端结点next域置为NULL
}
void InitList(LinkList *&L)
{L=(LinkList *)malloc(sizeof(LinkList));     //创建头结点L->next=NULL;
}
void DestroyList(LinkList *&L)
{LinkList *p=L,*q=p->next;while (q!=NULL){free(p);p=q;q=p->next;}free(p);    //此时q为NULL,p指向尾结点,释放它
}
bool ListEmpty(LinkList *L)
{return(L->next==NULL);
}
int ListLength(LinkList *L)
{LinkList *p=L;int i=0;while (p->next!=NULL){i++;p=p->next;}return(i);
}
void DispList(LinkList *L)
{LinkList *p=L->next;while (p!=NULL){printf("%d ",p->data);p=p->next;}printf("\n");
}
bool GetElem(LinkList *L,int i,ElemType &e)
{int j=0;LinkList *p=L;while (j<i && p!=NULL){j++;p=p->next;}if (p==NULL)            //不存在第i个数据结点return false;else                    //存在第i个数据结点{e=p->data;return true;}
}
int LocateElem(LinkList *L,ElemType e)
{LinkList *p=L->next;int n=1;while (p!=NULL && p->data!=e){p=p->next;n++;}if (p==NULL)return(0);elsereturn(n);
}
bool ListInsert(LinkList *&L,int i,ElemType e)
{int j=0;LinkList *p=L,*s;while (j<i-1 && p!=NULL) //查找第i-1个结点{j++;p=p->next;}if (p==NULL)    //未找到位序为i-1的结点return false;else            //找到位序为i-1的结点*p{s=(LinkList *)malloc(sizeof(LinkList));//创建新结点*ss->data=e;s->next=p->next;                        //将*s插入到*p之后p->next=s;return true;}
}
bool ListDelete(LinkList *&L,int i,ElemType &e)
{int j=0;LinkList *p=L,*q;while (j<i-1 && p!=NULL)    //查找第i-1个结点{j++;p=p->next;}if (p==NULL)                //未找到位序为i-1的结点return false;else                        //找到位序为i-1的结点*p{q=p->next;              //q指向要删除的结点if (q==NULL)return false;           //若不存在第i个结点,返回falsee=q->data;p->next=q->next;        //从单链表中删除*q结点free(q);                //释放*q结点return true;}
}
int main()
{LinkList *L;InitList(L);ListInsert(L, 1, 15);ListInsert(L, 1, 10);ListInsert(L, 1, 5);ListInsert(L, 1, 20);DispList(L);DestroyList(L);return 0;
}

第四周实践项目2 算法库——单链表相关推荐

  1. 第八周实践项目9 算法库——广义表

    /* *Copyright (c) 2017,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:项目9- *作 者:邵雪源 *完成日期:2017年12月14日 *版 ...

  2. 第四周实践项目4 建立算法库——双链表

    /* *Copyright (c) 2017,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:项目4-数据结构之自建算法库--双链表 *作 者:邵雪源 *完成日期 ...

  3. 数据结构与算法:单链表(利用万能指针实现对任意类型数据进行操作)

    前言 C语言的指针真的很强大,万能指针更强大,可以指向任意类型的数据.在上篇博客 数据结构与算法:单链表(超详细实现)中用C语言实现了单链表的相关算法,不过却有局限性 只能针对某一种数据类型还是不够强 ...

  4. 数据结构与算法之单链表

    数据结构与算法之单链表 //链表的实现/*实现单链表的 构建.数据添加.数据删除(返回元素所在位置).数据查找(返回元素所在的位置)的算法设计:*/ //链表的实现/*实现单链表的 构建.数据添加.数 ...

  5. 冒泡排序算法的单链表实现

    引言: 这几天都在忙着参加几个工作室(别问为什么是"几个",问就是海投)的考核,报的都是后台组.后台的考核中必定是少不了单链表ADT和排序算法的.本专栏将专攻排序算法部分.注意,是 ...

  6. 第四周实践项目3单链表:逆置、连接与递增判断(包含三个程序)

    /* *Copyright (c) 2017,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:项目3-1.设计一个算法,将一个带头结点的数据域依次为a1,a2,- ...

  7. 第四周实践项目7 多项式求和

    /* *Copyright (c) 2017,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:项目7- 用单链表存储一元多项式,并实现两个多项式的加法. *作 者 ...

  8. 第四周实践项目5 猴子选大王(循环链表)

    /* *Copyright (c) 2017,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:项目5-一群猴子,编号是1,2,3 -m,这群猴子(m个)按照1-m ...

  9. 单链表的合并算法_图解算法:单链表两两反转 | 眼睛会了手就会系列

    一. 序 链表作为一种基本的数据结构,本身理解起来,很简单.它通过指针或者叫引用,将一组零散的内存空间(结点),串联起来组成一个数据存储结构. 链表根据其指针的指向和丰富程度,可以分为单链表.双向链表 ...

最新文章

  1. 可爱又好用!阿里云盘「小白羊版」
  2. 【Paper】2020_异构无人机编队防御及评估策略研究_左剑凯
  3. MongoDB和Java(5):Spring Data整合MongoDB(注解配置)
  4. Flutter 气泡背景效果 仿苹果桌面运动的气泡
  5. 基于visual Studio2013解决C语言竞赛题之1083人机博弈
  6. 详细剖析linux的内存管理方式(分段式、分页式、段页式),以及进程状态的具体关系
  7. 5.7 并行复制配置 基于GTID 搭建中从 基于GTID的备份与恢复,同步中断处理
  8. Android快速开发框架ZBLibrary源码分享
  9. 当BeanUtils遇到泛型
  10. Python文章归档
  11. SAP BW报表使用操作手册——基础操作
  12. 无刷直流电机四象限matlab pudn,一种无刷直流电机四象限PWM调制方式的分析和设计...
  13. 基于Hough变换的直线检测(Matlab)
  14. 应用时间序列分析_时间序列-应用
  15. 基于nrf52832 mpu6050应用实例(7)
  16. 我体验了禾多科技的自动驾驶汽车,离量产不远了!
  17. java 存根,使用mockito使用三个参数对方法进行存根
  18. VOIP 语音视频通话 ---总述
  19. 英文文献翻译(白嫖版)
  20. 超好用的windows远程桌面管理工具Remote Desktop Connection Manager

热门文章

  1. How to use USB to do charger detection instead of PMIC?
  2. android根据项目把文件编译到文件系统中
  3. Android2.3.7源码结构分析
  4. java join()源码_Java Thread的join() 之刨根问底
  5. 是啥意思_227大团结是什么梗啥意思 微博227大团结事件始末介绍
  6. antd + react model自定义footer_使用ESLint+Prettier规范React+Typescript项目
  7. “5W1H”带你来学习JavaScript
  8. 在CMD窗口中使用javac和java命令进行编译和执行带有包名的具有继承关系的类
  9. 2015/06/08
  10. #研发解决方案介绍#基于StatsD+Graphite的智能监控解决方案