c实现双向链表
实现双向链表:创建、插入、删除
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h> using namespace std; typedef struct student
{
int data;
struct student *next;
struct student *pre;
}dnode; //创建链表
dnode *create()
{
//1. 定义变量
dnode *head = NULL;
dnode *p = NULL;
dnode *s = NULL;
int x = ;
int cycle = ; //2. 新建head
head = (dnode*)malloc(sizeof(dnode));
p = head; //3. 添加节点
while(cycle)
{
printf("input the data:");
scanf("%d", &x); if (x != )
{
s = (dnode*)malloc(sizeof(dnode));
s->data = x;
p->next = s;
s->pre = p;
p = s;
}
else
{
cycle = ;
}
} //4. 删除 head
p->next = NULL;
p = head;
head = head->next;
free(p);
p = NULL; //5. 返回 head
return head;
} //插入节点
dnode *insert(dnode *head, int num)
{
//1. 定义变量
dnode *p0 = NULL;
dnode *p1 = NULL;
p1 = head; //2. 新建节点
p0 = (dnode*)malloc(sizeof(dnode));
p0->data = num; //3. 定位插入位置(升序)
while(p0->data > p1->data && p1->next != NULL)
{
p1 = p1->next;
} //4. 插入新节点
if (p0->data > p1->data) //尾
{
p1->next = p0;
p0->pre = p1;
p0->next = NULL;
}
else
{ if (head == p1) //头
{
p0->next = p1;
p1->pre = p0;
head = p0;
}
else //中间
{
p1->pre->next = p0;
p0->next = p1;
p0->pre = p1->pre;
p1->pre = p0;
}
} //5. 返回 head
return head;
} //删除节点
dnode *del(dnode *head, int num)
{
//1. 定义变量
dnode *p = NULL;
p = head; //2. 定位节点
while (num != p->data && p->next != NULL)
{
p = p->next;
} //3. 删除节点
if (num != p->data)
{
printf("not found:%d\n", num);
}
else
{
if (p == head) //头
{
head = p->next;
head->pre = NULL;
free(p);
}
else if (p->next == NULL) //尾
{
p->pre->next = NULL;
free(p);
}
else //中间
{
p->next->pre = p->pre;
p->pre->next = p->next;
free (p);
}
} return head;
} //计算链表长度
int length(dnode *head)
{
dnode *p;
int n = ;
p = head; while(p != NULL)
{
p = p->next;
n++;
} printf("len:%d\n", n);
return n;
} //显示
void show(dnode *head)
{
dnode *p;
int n = ;
p = head; while(p != NULL)
{
printf("data:%d ", p->data);
p = p->next;
}
printf("\n");
} int main()
{
dnode *head = create();
show(head);
length(head); head = insert(head, );
show(head); head = del(head, );
show(head); }
c实现双向链表的更多相关文章
- 学习Redis你必须了解的数据结构——双向链表(JavaScript实现)
本文版权归博客园和作者吴双本人共同所有,转载和爬虫请注明原文链接 http://www.cnblogs.com/tdws/ 下午分享了JavaScript实现单向链表,晚上就来补充下双向链表吧.对链表 ...
- 双向链表、双向循环链表的JS实现
关于链表简介.单链表.单向循环链表.JS中的使用以及扩充方法: 单链表.循环链表的JS实现 关于四种链表的完整封装: https://github.com/zhuwq585/Data-Structu ...
- 剑指Offer面试题:25.二叉搜索树与双向链表
一.题目:二叉搜索树与双向链表 题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向.比如输入下图中左边的二叉搜索树,则输出转换之后的 ...
- Linux 内核数据结构:Linux 双向链表
Linux 内核提供一套双向链表的实现,你可以在 include/linux/list.h 中找到.我们以双向链表着手开始介绍 Linux 内核中的数据结构 ,因为这个是在 Linux 内核中使用最为 ...
- Linux 内核数据结构:双向链表
Linux 内核提供一套双向链表的实现,你可以在 include/linux/list.h 中找到.我们以双向链表着手开始介绍 Linux 内核中的数据结构 ,因为这个是在 Linux 内核中使用最为 ...
- 线性表-双向链表(LinkedList)
双向链表:如图1-3 所示,会把当前header拆分开,重新插入一个Entry<E>. LinkedList源码 0.首先这个类中的两个变量 private transient Entry ...
- Shuffling Machine和双向链表
1. 双向链表 https://github.com/BodhiXing/Data_Structure 2. Shuffling Machine https://pta.patest.cn/pta/t ...
- MS - 1 - 把二元查找树转变成排序的双向链表
## 1. 把二元查找树转变成排序的双向链表 ## ### 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表. ### 要求不能创建任何新的结点,只调整指针的指向. 10 ...
- javascript中的链表结构—双向链表
1.概念 上一个文章里我们已经了解到链表结构,链表的特点是长度不固定,不用担心插入新元素的时候新增位置的问题.插入一个元素的时候,只要找到插入点就可以了,不需要整体移动整个结构. 这里我们了解一下双向 ...
- Java自己实现双向链表LinkList
/** * <p> * Node 双向链表实体类 * <p> * * @author <a href="mailto:yangkj@corp.21cn.com& ...
随机推荐
- HTML中关于动态创建的标签无法绑定js事件的解决方法:.on()方法的 [.selector]
在前端页面的时候,会经常遇到用JavaScript动态创建出来的Button按钮或其他标签无法使用点击事件的问题.如下代码,使用jquery在body中动态创建一个class为demo的Button按 ...
- Spring Boot 全局Exception处理
一.代码如下 package com.zxguan; import org.springframework.web.bind.annotation.ControllerAdvice; import o ...
- 奇妙的算法【4】-汉诺塔&哈夫曼编码
1,汉诺塔问题[还是看了源码才记起来的,记忆逐渐清晰] 汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着6 ...
- Flutter笔记(一)
Android/iOS移动端开发 原生开发 Android原生应用通常指使用Java或Kotlin语言直接调用Android SDK开发的应用程序:而iOS原生应用通常指使用Objective-C或S ...
- 减少打包组件vue.config.js——Webpack的externals的使用
vue.config.js module.exports = { configureWebpack:{ externals: { vue: 'Vue', 'vue-router':'VueRouter ...
- adminMongo:mongoDB node GUI(mongoDB图形化界面)
adminMongo:mongoDB node GUI(mongoDB图形化界面) 获取项目项目 克隆:git clone https://github.com/mrvautin/adminMongo ...
- kong网关: service+route+upstream
对于刚开始学习kong网关,总是一脑子浆糊迷迷糊糊.虽然已经安装好,但却不知道接下来如何下手, 因为包含项太多:service.routes.upstream.consumer.plugins等等.一 ...
- 微服务、SOA、ESB比较
很多时候会听到微服务.SOA.ESB之间有着联系也有着区别,有时候了解了一下,过段时间有混肴模糊了今天看了一篇文章写的很好,特地记录一下. 原文地址:https://mp.weixin.qq.com/ ...
- 用js刷剑指offer(斐波那契数列)
牛客网链接 下面介绍一下什么是斐波那契数列 js代码 知道了通项公式,那代码就非常简单了 function Fibonacci(n) { // write code here let pre = 1 ...
- 用.htaccess 禁止IP访问
用.htaccess 禁止某IP访问 Order Allow,Deny Allow from all Deny from 1.1.1.1 2.2.2.2 3.3.3.3 允许所有,禁止xxxx,请将里 ...