本来还不会写双向链表的,但最近学习了二叉树后,突然意识到这不就是双向链表嘛,然后通过对二叉树的理解,实现了一下双向链表。

  代码:

#define SIZE 10

DouLL * head, *n, *p;

head =(DouLL * )malloc(sizeof(DouLL));
p = head;  /* p指针的作用很重要 */
p->Item = 1;
p->prev = p->next = NULL;
for (int i = 1; i < SIZE; i++)
{
n =(DouLL * )malloc(sizeof(DouLL));
n->Item = i + 1;
n->prev = p;  /* 防止找不到头结点 */
p->next = n;
p = p->next;
}
n->next = NULL; /* 若要循环应改为: n -> next = head; */
head->prev = NULL; /* head -> prev = n; */

  code:

//双向链表
#include<stdio.h>
#include<stdlib.h>
#include<conio.h> #define bool int
#define true 1
#define false 0; typedef struct douLinkList
{
struct douLinkList * next; //下一个
struct douLinkList * prev; //前一个
int Item;
}DouLL; /* 实现插入功能 */
bool InsertLL();
/* 实现删除功能 */
bool deleteLL(); bool InsertLL(DouLL * h, int X, int i)
{
DouLL * p;
int j; j = 1;
while(j < i - 1 && h)
{
h = h -> next;
++ j;
}
p = malloc(sizeof(DouLL));
p -> Item = X;
p -> prev = h;
p -> next = h -> next;
h -> next -> prev = p;
h -> next = p;
return true;
} bool deleteLL(DouLL * h, int X)
{
DouLL * temp; if(!h)
{
fprintf(stderr, "链表已空!\n");
return false;
}
while(X != h -> Item && h)
{
h = h -> next;
}
temp = h;
h -> prev -> next = h -> next;
h -> next -> prev = h -> prev;
free(temp);
return true;
} int main()
{
char c;
int i, SIZE, X;
DouLL * head, * n, * p; puts("初始链表长度:");
scanf("%d", &SIZE); head = malloc(sizeof(DouLL));
p = head;
p -> Item = rand() % 100 + 50;
p -> prev = p -> next = NULL;
for(i = 1; i < SIZE; i++)
{
n = malloc(sizeof(DouLL));
n -> Item = rand() % 1000 + 50;
n -> prev = p;
p -> next = n;
p = p -> next;
}
n -> next = NULL;
head -> prev = NULL; puts("1) 显示 2) 删除");
puts("3) 插入 4) 退出");
while(1)
{
c = getch();
if(c == '1')
{
puts("Order:"); p = head;
while(p)
{
printf("%d ", p -> Item);
p = p -> next;
}
printf("NULL\n"); puts("ReveOrder:");
p = n;
while(p)
{
printf("%d ", p -> Item);
p = p -> prev;
}
printf("NULL\n");
}
if(c == '2')
{
printf("\n删除:");
scanf("%d", &X);
p = head;
deleteLL(p, X);
}
if(c == '3')
{
printf("\n插入(数据 位置):");
scanf("%d %d", &X, &i);
p = head;
InsertLL(p, X, i);
}
if(c == '4')
break;
}
return 0;
}

  

DoublyLinkedList(双向链表)的更多相关文章

  1. golang数据结构和算法之DoublyLinkedList双向链表

    双向链表比起单向链表, 多了一个向前指向的指针, 所以在增删查改时,要同时照顾到两个指针的指向. DoublyLinkedList.go package DoublyLinkedList //双向链表 ...

  2. Java数据结构——双向链表

    //================================================= // File Name : DoublyLinked_demo //------------- ...

  3. 学习Redis你必须了解的数据结构——双向链表(JavaScript实现)

    本文版权归博客园和作者吴双本人共同所有,转载和爬虫请注明原文链接 http://www.cnblogs.com/tdws/ 下午分享了JavaScript实现单向链表,晚上就来补充下双向链表吧.对链表 ...

  4. 双向链表、双向循环链表的JS实现

    关于链表简介.单链表.单向循环链表.JS中的使用以及扩充方法:  单链表.循环链表的JS实现 关于四种链表的完整封装: https://github.com/zhuwq585/Data-Structu ...

  5. java实现双向链表

    PS:双向链表(每个节点含有指向前一个节点的前驱与后一个节点的后继) public class DoublyLinkedList { static class Node { private Objec ...

  6. JavaScript数据结构与算法(七) 双向链表的实现

    TypeScript方式实现源码 // 双向链表和普通链表的区别在于, 在链表中, // 一个节点只有链向下一个节点的链接,而在双向链表中,链接是双向的:一个链向下一个元素, // 另一个链向前一个元 ...

  7. js数据结构与算法--双向链表的实现

    双向链表也叫双链表,是链表的一种,它的每个数据节点中都有两个指针,分别指向直接后继和直接前驱.所以,双向链表中的任意一个节点开始,都可以很方便的访问它的前驱节点和后继节点. 双向链表的实现 linke ...

  8. PHP算法学习(7) 双向链表 实现栈

    2019年2月25日17:24:34 final class BasicNode { public $index; public $data; public $next = null; public ...

  9. JavaScript——双向链表实现

    本文版权归博客园和作者吴双本人共同所有,转载和爬虫请注明原文链接 http://www.cnblogs.com/tdws/ 下午分享了JavaScript实现单向链表,晚上就来补充下双向链表吧.对链表 ...

随机推荐

  1. C++算法导论第九章O(n)期望选择序列第i小的数字

    #include<iostream> #include<vector> #include<algorithm> #include<time.h> usi ...

  2. Bugku-CTF分析篇-手机热点(有一天皓宝宝没了流量只好手机来共享,顺便又从手机发了点小秘密到电脑,你能找到它吗?)

    手机热点 httppan.baidu.coms1cwwdVC 有一天皓宝宝没了流量只好手机来共享,顺便又从手机发了点小秘密到电脑,你能找到它吗? 题目来源:第七季极客大挑战  

  3. jquery实现登录后右下角弹窗提醒(附带简单样式)

    页面代码如下:   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://w ...

  4. 前端之HTML基础篇

    HTML基础篇 目录                                                                               本章内容: 简介 1. ...

  5. base64加/解密算法C++实现

    base64编码原理:维基百科 - Base64 其实编码规则很简单,将字符串按每三个字符组成一组,因为每个字符的 ascii 码对应 0~127 之间(显然,不考虑其他字符集编码),即每个字符的二进 ...

  6. 使用ltp4j碰到Can't find dependent libraries报错信息的问题解决

    项目中使用了哈工大的自然语言处理模块ltp4j,使用idea工具集成到项目中之后,在本机运行没有问题,一切正常.打成war包,部署到服务器上,使用的时候报错Can't find dependent l ...

  7. 将linux上的项目传到github上

    在网友的帮助下,终于学会了这一招. 1.首先要确定你的linux上有安装了git. 2.到你的网页github上新建一个仓库,将其clone到linux上. 3.将你的项目放进这个空的仓库(文件夹). ...

  8. opencv:图像直方图均衡化

    // 直方图均衡化 Mat gray, dst; cvtColor(src, gray, COLOR_BGR2GRAY); equalizeHist(gray, dst); imshow(" ...

  9. HDU 1237 简单计算器(栈+stringstream)

    提供几份代码,这题的输入可以用stringsteam处理,先处理乘除后处理加减,正常思路,但是后面统计加减法的时候,对栈的运用错了,我用的时候相当于给它多加了几个括号就错了. 正确的简单解法就是,加法 ...

  10. springboot @Configuration @bean注解作用

    @Configuration注解可以达到在Spring中使用xml配置文件的作用 @Bean就等同于xml配置文件中的<bean> 在spring项目中我们集成第三方的框架如shiro会在 ...