数据结构实验二——单链表的基本实现
来源:互联网 发布:光纤网络监控安装图解 编辑:程序博客网 时间:2024/06/14 04:10
老师布置的数据结构实验二内容:
实验二、单链表(2学时)
1.设计实验
设计算法,实现线性结构上的单链表的产生以及元素的查找、插入与删除。(1-4题必做,5-8题选做)具体实现要求:
(1)用正位序的方法,建立一个由13个整数构成的带头结点的单链表。建议13个整数由键盘输入。
(2)从键盘输入1个整数,在单链表中查找该结点的位置。若找到,则显示“找到了”;否则,则显示“找不到”。
(3)从键盘输入2个整数,一个表示欲插入的位置i,另一个表示欲插入的数值x,将x插入在对应位置上,输出单链表所有结点值,观察输出结果。
(4)从键盘输入1个整数,表示欲删除结点的位置,输出单链表所有结点值,观察输出结果。
*(5)将单链表中值重复的结点删除,使所得的结果表中个结点值均不相同,输出单链表所有结点值,观察输出结果。
*(6)删除其中所有数据值为偶数的结点,输出单链表所有结点值,观察输出结果。
*(7)把单链表变成带表头结点的循环链表,输出循环单链表所有结点值,观察输出结果。
*(8)将单链表分解成两个单链表A和B,使A链表中含有原链表中序号为奇数的元素,而B链表中含有原链表中序号为偶数的元素,且保持原来的相对顺序,分别输出单链表A和单链表B的所有结点值,观察输出结果。
以下是我所写的1-4实现代码:
```#include <stdafx.h>#include <malloc.h>#define OK 1 #define ERROR 0 #define TURE 1 #define FALSE 0 typedef struct linkedlist //定义单链表结构体{ int data; linkedlist *next;}linkedlist,*linklist; //定义单链表实例linkedlist和*nextint initList(linklist &list) //创建单链表的方法{ list=(linklist)malloc(sizeof(linkedlist)); //动态分配空间 list->next=NULL; //声明指针 return OK;}int insertList(linklist &list,int i,int e) //在单链表中第i位置插入元素e{ linklist L=list,s; for(int j=0;j<i-1;j++) { if (L->next==NULL) return ERROR; //判断插入的位置是否超出链表长度,超出返回ERROR L=L->next; //根据链的指针往下一个走 } //将指针直到插入位元素 s=(linklist)malloc(sizeof(linkedlist)); //添加新元素 s->data=e; s->next=L->next; //s.next指向下一个元素 L->next=s; //L.next指向s,实现s的插入 return OK;}int findifElem(linklist &list,int i) //查找链表list中是否存在元素i{ linklist L=list; while(L!=NULL) //用while语句实现遍历 { if (L->data == i) return TURE; //找到了元素i,返回TURE L=L->next; //查找下一个 } return FALSE; //没有找到元素,返回FALSE}int displayList(linklist &list) //输出链表list中的所有元素{ linklist L=list->next; //更改初始位置到第一个元素 while (L!=NULL) { printf("%d ",L->data); L=L->next; } //循环输出值,直到最后一个 printf("\n"); return OK;}int deleteElem(linklist &list,int i) //删除链表list中的第i位元素{ linklist L=list,s; for (i;i!=1;i--) //将指针移到第i-1位元素上 { L=L->next; if (L==NULL) return ERROR; //如果i超出了链表的长度,返回ERROR } s=L->next; //用s记录第i位元素的值 L->next=s->next; //将i-1位的指针直接指到原第i+1位元素上 free(s); //释放s return OK; //成功则返回OK}int main(){ linklist h; initList(h); int n,x; printf("依次输入13个元素\n"); for (int i=1;i<=13;i++) { insertList(h,i,i); } displayList(h); printf("\n请输入要查找的元素:"); scanf("%d",&x); if (findifElem(h,x)) printf("\n找到了"); else printf("\n没找到"); printf("\n请输入要插入的位数和数字(空格隔开):"); scanf("%d %d",&n,&x); if (!insertList(h,n,x)) printf("输入位数不合法.\n"); displayList(h); printf("\n请输入要删除的位数:"); scanf("%d",&n); if(!deleteElem(h,n)) printf("输入位数不合法.\n"); displayList(h); return OK;}
以上,等更。
0 0
- 数据结构实验二——单链表的基本实现
- 数据结构实验二--单链表的基本实现
- 【数据结构实验】实验二 顺序表的基本操作的实现
- 实验二 数据结构——线性表的实验
- 数据结构实验报告单链表的基本操作
- 数据结构实验十一——树的基本操作
- 数据结构实验2——二叉树的基本操作
- 数据结构实验——基于数组的栈基本操作
- 南邮数据结构实验二---二叉树的基本操作及哈夫曼编码译码系统的实现
- 爹地的实验:实验一: 数据结构实验一线性表的基本操作实现及其应用
- 数据结构第五版第二章实验2.实现单链表的各种基本运算
- 实验二 单链表的实现
- 实验二:单链表的实现
- [实验二] 单链表的基本操作
- 数据结构—链表-单链表基本操作实现
- 《数据结构》实验二:线性表的实验
- 《数据结构》实验二 线性表的实验
- 《数据结构》实验二:线性表的实验
- Eclipse中普通文件夹与java包的转换(package,source folder,folder)
- LibGDX_1.6: 纹理(图片)的绘制 与 assets 资源文件夹: UI 初体验
- ios开发——xcode7以上 免证书真机调试
- 自己动手用ICMP写ping程序
- QT线程(一):线程类 http://blog.csdn.net/calm_agan/article/details/6300709
- 数据结构实验二——单链表的基本实现
- 修改framework/base下面的api要注意更新api/current.txt文件
- LeetCode:Binary Tree Preorder Traversal
- 我眼中的互联网运营感观——如何进行用户运营?
- LeetCode Binary Tree Right Side View
- lua math库
- Python爬虫入门一之综述
- winpcap实现从TCP三次握手到发送http请求
- ios开发——response之Http报头Accept&Content-Type