一、【实验目的】
1、掌握建立单链表的基本方法。

2、掌握单链表的插入、删除算法的思想和实现

二、【实验内容】

仿照教材中的单链表实现例子,自己设计一个有序单链表,单链表中的数据元素为整型并递增有序。有序单链表的定义:

逻辑结构:有序线性表,数据元素递增有序

存储结构:链式

操作集合:初始化、插入、删除、撤销

(1)ListInitiate(L) 初始化线性表,生成一个空表L。

(2)ListInsert(L,x) 在有序表L中插入数据元素x,使得新表仍然有序。

(3)ListDelete(L,x) 删除有序表L中的数据元素x,若删除成功则返回1,不成功则返回0。

(4)Destroy(L) 撤销单链表

要求:

1.有序单链表的操作集合有如下操作:初始化、插入、删除、撤销,使用头文件单链表的代码。

2.编写主函数main()验证所设计的有序单链表是否能正确插入、删除。

提示:

1.插入操作时,从链表的第一个数据元素结点开始,逐个比较每个结点的data域值和x的值,当data小于等于x时,进行下一个结点的比较;否则就找到了插入结点的合适位置,此时申请新结点把x存入,然后把新结点插入;当比较到最后一个结点仍有data小于等于x时,则把新结点插入单链表尾。

2.删除操作时,从链表的第一个数据元素结点开始,逐个比较每个结点的data域值和x的值,当data不等于x时,进行下一个结点的比较;否则就找到了要删除的结点,删除结点后释放结点。如果到了表尾还没有找到值为x的结点,则链表中没有要删除的元素。

源代码

头文件
typedef struct SingleNode
{ElemType data;struct SingleNode *next;
}SingleLinkedList;void ListInitiate(SingleLinkedList **head)
{if((*head = (SingleLinkedList*)malloc(sizeof(SingleLinkedList)))==NULL)exit(1);(*head)->next = NULL;
}void ListInsert(SingleLinkedList *head,ElemType x)
{SingleLinkedList *p, *q,*h;p = head->next;q = head;while(p!=NULL&&p->data <=x){q = p;p = p->next;}h = (SingleLinkedList*)malloc(sizeof(SingleLinkedList));h-> data = x;h->next = q->next;q->next = h;
}int ListDelete(SingleLinkedList *head,ElemType x)
{SingleLinkedList *p, *q;p = head;while(p->next!= NULL){if(p->next->data == x){break;}p=p->next;}if(p->next == NULL)return 0;else{q=p->next;p->next = p->next->next;free(q);return 1;}}void Destroy(SingleLinkedList **head)
{SingleLinkedList *p, *q;p = *head;while(p != NULL){q = p;p = p->next;free(q);}*head = NULL;
}int listlength(SingleLinkedList *head)
{SingleLinkedList *p=head;int size = 0;while(p->next!=NULL){p=p->next;size++;}return size;
}源文件
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef int ElemType;
#include"LinkedList.h"int main(void)
{SingleLinkedList *head,*p;ListInitiate(&head);int x,n,i,s,t,m;printf("请选择输入多少个数字:");scanf("%d",&n);for(i = 0;i < n;i++){printf("第%d个数字是:",i+1);scanf("%d",&x);ListInsert(head,x);}p=head;for(i = 0;i < n;i++){printf("%5d",p->next->data);p=p->next;}printf("\n输入你要删除的数字:");scanf("%d",&s);m=ListDelete(head,s);if(m=0)printf("删除失败");p=head;t=listlength(head);for(i = 0;i < t;i++){printf("%5d",p->next->data);p=p->next;}return 0;
}

数据结构实验二---单链表的实现相关推荐

  1. 数据结构实验1单链表

    文章目录 实验1 单链表 一. 实验目的或任务 二. 实验教学基本要求 三. 实验教学的内容或要求 需要word文件请访问 http://daxs.top 站内搜索实验名称或者实验内容访问文章并且下载 ...

  2. 【C语言】数据结构实验报告--单链表

    实验内容 一.将单链表按基准划分,以单链表的首节点值x为基准将该单链表分割为两部分,使所有小于x的结点排在大于或等于x的结点之前. #include<stdio.h> #include&q ...

  3. 数据结构学习(二)——单链表的操作之头插法和尾插法创建链表

    http://blog.csdn.net/abclixu123/article/details/8210109 链表也是线性表的一种,与顺序表不同的是,它在内存中不是连续存放的.在C语言中,链表是通过 ...

  4. 数据结构与算法--单链表相关面试题

    此文章仅作为自己学习过程中的记录和总结,同时会有意地去用英文来做笔记,一些术语的英译不太准确,内容如有错漏也请多指教,谢谢! 一.概述 获取单链表的有效元素个数[新浪面试题1] 获取单链表倒数第k个结 ...

  5. python数据结构基础(单链表,多链表,二叉树)

    python数据结构基础(单链表,多链表,二叉树) 数据结构指数据对象中数据元素之间的关系 Python 给我们提供了很多现成的数据结构类型,这些系统自己定义好的,不需要我们自己去定义的数据结构叫做 ...

  6. 单容水箱液位pid控制实验报告_实验二(单容水箱液位pid控制实验)实验报告电子版.doc...

    实验二(单容水箱液位pid控制实验)实验报告电子版 电子科技大学中山学院学生实验报告 系别: 机电工程学院 专业: 自动化 课程名称:过程控制与自动化仪表 班级: 自动化 姓名: 学号: 组别: 实验 ...

  7. 数据结构之——《单链表》

    数据结构之--<单链表> 1.链表概念 2.链表分类 3.接口函数实现 1.链表概念 链表是一种物理存储结构上非连续,非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现. ...

  8. 数据结构精讲——单链表

    新手必会数据结构精讲--单链表 链表的介绍 概念:链表是一种物理存储结构上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 . 实际中链表的结构非常多样,以下情况组合起来就 ...

  9. 数据结构实验二 :二叉树的操作与实现

    数据结构实验一:线性表,堆栈和队列实现 数据结构实验二 :二叉树的操作与实现 数据结构实验三: 图的操作与实现 数据结构实验四 : 查找和排序算法实现 文章目录 一.实验目的: 二.使用仪器.器材 三 ...

  10. 线性表基本操作,单链表的建立(头插法,尾插法)、插入、删除、遍历操作的实现(c++ 数据结构 实验二)

    大学数据结构课程的实验题目,掌握线性表的链接存储结构,用c++语言描述 一.实验要求 1.分别用头插法和尾插法建立一个含有若干结点的单链表 2.对已建立的单链表进行插入.删除.遍历输出等操作 二.代码 ...

最新文章

  1. 人脸照片自动生成游戏角色_ICCV2019论文解析
  2. 对Android 开发者有益的 40 条优化建议(转)
  3. python def函数报错详解_【python】详解python函数定义 def()与参数args、可变参数*args、关键参数**args使用实例...
  4. VUE 新手入门感慨
  5. Oracle其它数据库对象:视图、序列、同义词
  6. 怎么在android中定义泛型,android – 如何在GSON TypeToken类中使用自定义泛型?
  7. 前端学习(1320):同步和异步得区别
  8. 为什么你设计的网页不够惊艳?
  9. mysql cnf参数_系统运维|MySQL my.cnf参数配置优化详解
  10. IOConsole Updater 报错解决办法
  11. 解决Conda install tensorflow弹窗Python.exe已经停止工作的问题
  12. eclipse新建java项目_用eclipse创建Java项目(以一个初学者的角度全面教学)
  13. 移动招聘笔试计算机类,2017中国移动校园招聘考试备考资料―计算机类习题三...
  14. web前端学习(十)flex布局
  15. java神经网络该怎么训练_浅谈训练神经网络的五大算法
  16. 教你写简单的黑客程序
  17. 餐厅小票打印模板_智慧餐厅多商家入驻小程序开发,成功案例:万足外卖!
  18. 基于ThreeJS修改模型材质
  19. HTTP常用的响应码说明(网页/服务器显示200、302、404、500是什么意思,表示什么)
  20. Smith数问题C++代码实现

热门文章

  1. Live reload
  2. Java数组排序(选择排序)
  3. java删除浏览器cookies_清除浏览器cookie
  4. html5数字在线处理,Qunee for HTML5 - 中文 : 事件处理
  5. 【学习总结匈牙利算法到KM算法】
  6. matlab qam信号仿真,基于Matlab/Simulink的QAM通信系统的仿真
  7. 导航网/广告位/导航分类/可运营
  8. T9社区注册流程记录(笔记)
  9. 漏洞payload 靶机_以DVRF(路由器漏洞靶机)为例解读JEB固件漏洞利用-阿里云开发者社区...
  10. 教你js生成二维码-QrCodeJS