单链表以及双向链表的操作
#include<stdio.h>
#include<stdlib.h>
#define MAX 30
typedef struct s //单向链表的存储结构
{
int data;
struct s *next;
}S,*LinkList;
typedef struct DuList //双向链表的存储结构
{
int data;
struct DuList *prior;
struct DuList *next;
}DuLNode,*DuLinkList;
int InitList(S *s) //创建空的单链表
{
s=(S *)malloc(sizeof(S));
s->next=NULL;
if(!s)return 0;
else return 1;
}
void ShuChu(S *p1) //输出单链表
{
while(p1!=NULL)
{
printf("%d ",p1->data);
p1=p1->next;
}
}
void CreateList(LinkList s,int n) //为所创建的单链表增加数据
{
int i,m;
S *r,*p1;
S *p;
// s=(S *)malloc(sizeof(S));
s->next=NULL;
r=s;
for(i=0;i<n;i++)
{
scanf("%d",&m);
p=(S *)malloc(sizeof(S));
p->data=m;
p->next=NULL;
r->next=p;
r=p;
}
p1=s->next;
/*while(p1!=NULL)
{
printf("%d ",p1->data);
p1=p1->next;
}*/
ShuChu(p1);
}
void ListInsert(S *s,int n,int m) //单链表中值的插入
{
int i=1;
S *p,*r,*p1;
p=(S *)malloc(sizeof(S));
r=s->next;
p->data=m;
while(i<(n-1)&&r!=NULL)
{
r=r->next;
i++;
}
if(i==n-1)
{
p->next=r->next;
r->next=p;
}
p1=s->next;
ShuChu(p1);
}
void ListDelect(S *s,int n) //单链表删除
{
int i=1;
S *p,*p1,*q;
p=s->next;
while(i<n-1&&p)
{
p=p->next;
i++;
}
if(i==n-1)
{
q=p->next;
p->next=p->next->next;
free(q);
}
p1=s->next;
ShuChu(p1);
}
void LocateElem(S *s,int m) //查找单链表中是否有要查找的值
{
S *p;
int i=1;
p=s->next;
while(p)
{
if(p->data==m)
{
printf("找到了!,其所在位置为%d",i);
break;
}
i++;
p=p->next;
}
}
int DuInitList(DuLinkList s1) //建立空的双向链表
{
s1=(DuLNode *)malloc(sizeof(DuLNode));
s1->next=NULL;
if(!s1)return 0;
else return 1;
}
void ShuChu1(DuLinkList s3) //输出双向链表中的值
{
while(s3)
{
printf("%d ",s3->data);
s3=s3->next;
}
printf("\n");
}
void CreateList_DuL(DuLinkList s2,int n) //向所创建的双向链表增加数
{
s2->next=NULL;
DuLinkList s3,r,s1;
int i=1,m;
r=s2;
while(i<=n)
{
s3=(DuLNode *)malloc(sizeof(DuLNode));
// s3->next=NULL;
scanf("%d",&m);
s3->data=m;
s3->next=NULL;
r->next=s3;
// s3->prior->next=s3;
r=s3;
i++;
}
s1=s2->next;
ShuChu1(s1);
}
void ListInsert_DuL(DuLinkList s1,int n,int m1) //向双向链表中插入数
{
DuLinkList s2,p,s3;
p=(DuLNode *)malloc(sizeof(DuLNode));
int n1=1;
s2=s1->next;
while(s2&&n1<n-1)
{
s2=s2->next;
n1++;
}
if(n1==n-1)
{
p->data=m1;
p->next=s2->next;
s2->next=p;
p->next->prior=p;
p->prior=s2;
}
s3=s1->next;
ShuChu1(s3);
}
void ListDelect_DuL(DuLinkList s2,int n) //删除双向链表第n个位置的值
{
int i=1;
DuLinkList s1,s3;
s1=s2->next;
while(i<n&&s1)
{
s1=s1->next;
i++;
}
if(n==i)
{
s1->prior->next=s1->next;
s1->next->prior=s1->prior;
//i++;
}
s3=s2->next;
ShuChu1(s3);
}
int main()
{
S s,s1;
DuLNode s2;
int m,n,m1,n1;
m=InitList(&s);
// s1=s;
if(m==1)
printf("内存分配完成!\n");
printf("请输入所创建的单链表的数据个数:\n");
scanf("%d",&n);
printf("请输入数:\n");
CreateList(&s,n);
printf("请输入要插入的数的位置及数:\n");
scanf("%d%d",&m,&n);
ListInsert(&s,m,n);
printf("请输入要删除的数的位置:\n");
scanf("%d",&n);
ListDelect(&s,n);
printf("请输入要查找的数:\n");
scanf("%d",&m);
LocateElem(&s,m);
printf("\n");
m1=DuInitList(&s2);
if(m1==1)
printf("双向链表初始化完成!\n");
printf("请输入所创建的链表的数据个数:\n");
scanf("%d",&n);
printf("请输入数:\n");
CreateList_DuL(&s2,n);
printf("请输入要插入的数的位置以及数:\n");
scanf("%d%d",&n,&m1);
ListInsert_DuL(&s2,n,m1);
printf("请输入要删除的数的位置:\n");
scanf("%d",&n);
ListDelect_DuL(&s2,n);
return 0;
}
转载于:https://www.cnblogs.com/zmy1/p/10079919.html
单链表以及双向链表的操作相关推荐
- 「数据结构 | 链表」单链表、双向链表节点操作演示动画
目录 1. 什么是链表 2. 链表数据结构 2.1 单链表数据结构(Java) 2.2 双向链表数据结构(Java) 3. 单链表操作动画 3.1 新增节点 3.2 删除节点 4. 双向链表操作动画 ...
- python之链表、单链表、双向链表、单向循环链表
python之链表.单链表.双向链表.单向循环链表 链表 顺序表的构建需要预先知道数据大小来申请连续的存储空间,而在进行扩充时,又需要进行数据的搬迁,所以使用起来并非很灵活 链表结构可以充分利用计算机 ...
- 【数据结构与算法】 01 链表 (单链表、双向链表、循环链表、块状链表、头结点、链表反转与排序、约瑟夫环问题)
一.线性表 1.1 概念与特点 1.2 线性表的存储结构 1.3 常见操作 1.4 应用场景 二.链表 2.1 链表简介 2.2 单向链表(单链表) 2.21 基本概念 2.22 单链表基本操作 2. ...
- 线性表详解(静态链表、单链表、双向链表、循环链表)
目录 申明 1. 线性表的定义 2. 线性表的抽象数据类型 3. 线性表的顺序存储结构 3. 1 顺序存储定义 3. 2 顺序存储方式 3. 3 数据长度与线性表长度区别 3. 4 地址计算方法 4. ...
- 顺序表和单链表的插入删除操作时间复杂度的区别
顺序表和单链表的插入删除操作时间复杂度的区别 最近在学习数据结构,看到如果需要用到大量的插入和删除操作,单链表的效率会高于顺序表.看到这里时内有有个疑惑,这两种数据结构的插入和删除操作的时间复杂度不都 ...
- 2.3.3单链表的双向链表
2.3.3双向链表 插入.删除 指在前驱和后驱方向都能游历(遍历)的线性链表 双向链表的每个结点有两个指针域 [结构]:prior data next 双链表通常采用带头结点的循环链表形式 可理解为首 ...
- 数据结构:单链表和双向链表
1.链表 链表是有序的列表,但是它在内存中是存储如下 小结: 链表是以节点的方,来存储是链式存储 每个节点包含data域,next域:指向下一个节点 如图:发现链表的各个节点不一定是连续存储 链表分带 ...
- 链表详解(单链表、双向链表、链表逆序)
目录 线性表 顺序存储结构 链式存储结构 单链表 单链表定义 单链表基本操作(仅供参考) 实例 循环单链表的状态图 双向链表 双向链表定义 双向链表特点 双向链表基本操作(仅供参考) 实例 双向链表的 ...
- 链表的基本概念以及java实现单链表-循环链表-双向链表
前言 线性结构是非常简单且常用的数据结构,而线性表则是一种非常典型的线性结构. 线性表定义 线性表的数据结构 链表 单链表 单链表的定义 单链表的插入和删除 单链表的遍历,清空,判空,获取指定结点 循 ...
- [Java数据结构][3]单链表以及双向链表Java代码实现
单链表Java代码实现,以水浒英雄链表为例 文章目录 单链表Java代码实现,以水浒英雄链表为例 定义一个英雄链表 定义一个SingleLinkedList 用于管理结点 初始化头结点以及添加结点到单 ...
最新文章
- Spring Boot 2.x基础教程:如何扩展XML格式的请求和响应
- MATLAB实用知识,如何对函数的输入进行检查和解析?
- GWT与Eclipse集成开发初步研究
- 韶关无线电厂台式计算机,中国芯片30年的历史 它背后有哪些不为人知的故事?...
- EF – 8.多对多关联
- 最近总结了串口(COM)读写操作的三种方式
- FD.io VPP环境下运行用户应用程序教程
- mysql统计记录数据库设计_MYSQL数据库设计,查询规范
- 前端----JavaScript
- 解决DOS窗口中文乱码问题
- 从感性和理性的角度谈APS系统
- Markdown语法快速入门(印象笔记)(从入门到精通,只有一步之遥)
- 【数据分析】黑色星期五(代码2)销售额分析1、2
- git Cherry-pick Failed your local changes would be overwritten by cherry-pick. hint: commit your
- si446使用记录(二):使用WDS3生成头文件
- IT产品是计算机类产品吗,IT产品是什么
- unity全栈开发是什么意思_为什么你应该尝试“全栈”
- 你觉得做程序员期间最开心的是什么?
- linux 什么是s权限、t权限?不是只有rwx权限吗
- 大功率电源36V 14A 500W 包含原理图PDF和PCB,及BOM 及变压器PFC电感设计
热门文章
- 那年,寻找工作的历程
- 微信小程序——尤克里里和弦查询
- placeholder—Jquery插件placeholder的使用方法
- Ant for Vue - input、select组件placeholder无法显示
- Vue学习之从入门到神经(两万字收藏篇)
- SqlServer支持多表关联的分页存储过程
- 经典排序算法(四)--基数排序Radix Sort
- Redis 彻底禁用RDB持久化
- ubuntu安装ffmpeg_手把手教你利用ffmpeg制作一个好用灵活的图片、视频压缩工具(再不需要去别的网站和用别的软件啦)...
- python如何获取权限_python 权限系统设计