数据结构实验二--单链表的基本实现
来源:互联网 发布:java从入门到精通第4版 编辑:程序博客网 时间:2024/05/22 04:39
数据结构实验
实验二、单链表(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.实现单链表的各种基本运算
- 实验二 单链表的实现
- 实验二:单链表的实现
- [实验二] 单链表的基本操作
- 《数据结构》实验二:线性表的实验
- 《数据结构》实验二 线性表的实验
- 《数据结构》实验二:线性表的实验
- 数据结构实验二 :线性表的实验
- 《数据结构》实验二 线性表的实验
- 《数据结构》实验二:线性表的实验
- 《数据结构》实验二:线性表的实验
- 数据结构实验二 :线性表的实验
- Xcode 7.1.1 下载失败的兄弟看过来
- Mastering Opencv ch3: markerless AR(三)
- (转)windows进程间通信(IPC)的方式
- 最近被node的post和get烦了一小下
- 欢迎使用CSDN-markdown编辑器
- 数据结构实验二--单链表的基本实现
- C-043.结构体的储存细节,以及#pragma pack(n)对齐方式
- Oracle 的INSTR函数MySQL实现
- javascript权威指南学习笔记-数组1(八)
- wamp上配置域名
- 算法复杂度分析——数学角度
- 高级多态(三):复杂的抽象层次结构
- (六十五)for循环
- nginx http处理请求入口