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

  代码:

#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. 使用@RunWith(SpringJUnit4ClassRunner.class)进行单元测试时 报错 和 java.lang.NoSuchMethodError的解决方法

    1 使用@RunWith(SpringJUnit4ClassRunner.class)进行单元测试时,需要junit高版本和spring-test的高版本才支持,junit需要4.0以上的,sprin ...

  2. Java-POJ1002-487-3279(含c++代码)

    Java 的读入还不熟练,解决不了空行的问题,还是只能用c++ A掉,唉~ 之后要把这个坑补掉 解决了,开心(*^▽^*)以下是AC的Java代码 以下是C++代码 #include<cstdi ...

  3. 09day 命令提示符优化及yum优化

    export PS1='\[\e[32;1m\][\u@\h \W]\$ \[\e[0m\]' 设置颜色 内容 结束 export PS1='\[\e[30;1m\][\u@\h \W]\$ \[\e ...

  4. Knapsack Cryptosystem 牛客团队赛

    时限2s题意: 第一行包含两个整数,分别是n(1 <= n <= 36)和s(0 <= s <9 * 10 18) 第二行包含n个整数,它们是{a i }(0 <a i ...

  5. oracle创建、删除索引等操作

    1.创建索引 create index 索引名 on 表名(列名); 2.删除索引 drop index 索引名; 3.创建组合索引 create index 索引名 on 表名(列名1,,列名2); ...

  6. A. DZY Loves Chessboard

    DZY loves chessboard, and he enjoys playing with it. He has a chessboard of n rows and m columns. So ...

  7. 结构体sizeof()问题与字节对齐

    32位机器上定义如下结构体: struct xx { long long _x1; char _x2; int _x3; char _x4[2]; static int _x5; }; int xx: ...

  8. blog主题——马路

    blog主题,存储一下 css /************************************************** 第一部分:所有的模板都使用的公共样式.公告样式是为了更好的向前 ...

  9. Python开发五子棋游戏【新手必学】

    五子棋源码,原创代码,仅供 python 开源项目学习.目前电脑走法笨笨的,下一期版本会提高电脑算法ps:另外很多人在学习Python的过程中,往往因为遇问题解决不了或者没好的教程从而导致自己放弃,为 ...

  10. 攻防世界 robots题

    来自攻防世界 robots [原理] robots.txt是搜索引擎中访问网站的时候要查看的第一个文件.当一个搜索蜘蛛访问一个站点时,它会首先检查该站点根目录下是否存在robots.txt,如果存在, ...