双链表的简单应用

/*当对单链表理解后,对双链表就好理解多了,单链表就是只有在结构体或者类中只有一个指针用来存储下一个节点的地址,双链表就是在里面有两个指针,一个用来存储上一个节点的地址,一个用来存储下一个节点的地址。这样的链表就叫双链表。*/

#include<iostream>

using namespace std;

struct Node

{

int a;

Node *prior,*next;         //前指针,后指针

};

int main()

{

Node *first,*r,*p;

first=new Node();    //因为在一个双链表中插入数据要用到它的前一个节点,或者后一个节点,所以这儿r就代表first的后一个节点,下面会用到

r=new Node();

first->next=r;

r->prior=NULL;

for(int i=20;i>=0;i--)      //将21个p指针依次插入以first为头结点的链表中。

{

p=new Node();

p->a=i;

p->next=first->next;       //p的next指针存储了first 的next指针存储的地址,

p->prior=first;                //p的前一个节点就是first,所以prior中存的是first的地址

first->next->prior=p;    //first原来的节点现在存储的是p的地址。

first->next=p;                //first的下一个节点就是p,  这儿四条语句的先后顺序需要注意一下

}

p=first->next;

for(int i=0;i<=20;i+=2)

{

while(p->next!=NULL)

{

if(p->a==i)

{

p->prior->next=p->next;      //这儿是删除a值为偶数的节点,剩下的为奇数节点

p->next->prior=p->prior;

cout<<p->a<<" ";

delete p;

break;

}

p=p->next;

}

}

p=first->next;

cout<<endl;

while(p->next!=NULL)

{

cout<<p->a<<" ";                             //输出的是奇数节点

p=p->next;

}

}

时间: 2024-10-10 09:11:58

双链表的简单应用的相关文章

循环双链表的简单实现

<span style="font-size:18px;"><strong>//代码为自己编写,可能有问题,欢迎大家留言指正!</strong></span> <span style="font-size:18px;"><strong> </strong></span> #include <iostream> #include <string> u

算法与数据结构基础7:C++双链表的简单实现

双链表在单链表的基础上加了一个指向前一个节点的指针. // DList.h #include <cstdio> #include <cassert> #include <iostream> using namespace std; class DList { public: // ************************************************************************** // 类的四大函数:构造函数.拷贝构造函数

redis源码分析(3)-- 基本数据结构双链表list

一.双链表结构 redis中实现的双链表结构体如下: 1 typedef struct list { 2 listNode *head; # 链表头 3 listNode *tail; # 链表尾 4 void *(*dup)(void *ptr); # 复制链表函数 5 void (*free)(void *ptr); # 释放节点函数 6 int (*match)(void *ptr, void *key); # 匹配函数 7 unsigned long len; # 链表节点个数 8 }

JAVA容器-模拟LinkedList实现(双链表)

一.概述 LinkedList实质上就是双向链表的拓展的实现,我们将关注一下问题.LinkedList 1.双向链表怎么来实现插入.删除.查询? 2.利用二分法提高查询效率. 3.不同步,线程不安全,需要使用Collections.synchronizedList()达到线程安全. 4.简单说,LinkedList就是数据结构中关于数据操作吗? 二.模拟实现 1.实现总体图(初始状态) 2.论述双链表的实现思想 双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和

java数据结构与算法之改良顺序表与双链表类似ArrayList和LinkedList(带Iterator迭代器与fast-fail机制)

转载请注明出处(请尊重原创!谢谢~): http://blog.csdn.net/javazejian/article/details/53073995 出自[zejian的博客] 关联文章: java数据结构与算法之顺序表与链表设计与实现分析 java数据结构与算法之双链表设计与实现 java数据结构与算法之改良顺序表与双链表类似ArrayList和LinkedList(带Iterator迭代器与fast-fail机制) ??这篇是数据结构与算法的第3篇,通过前两篇的介绍,对应顺序表和链表已有

java数据结构与算法之双链表设计与实现

转载请注明出处(万分感谢!): http://blog.csdn.net/javazejian/article/details/53047590 出自[zejian的博客] 关联文章: 关联文章: java数据结构与算法之顺序表与链表设计与实现分析 java数据结构与算法之双链表设计与实现 java数据结构与算法之改良顺序表与双链表类似ArrayList和LinkedList(带Iterator迭代器与fast-fail机制) ??上一篇文章分析顺序表和单链表,本篇就接着上篇继续聊链表,在单链表

双链表操作

处理完了单链表,这次处理双链表. 在一个双链表中,每个节点都包含两个指针,指向前一个节点的指针和指向后一个节点的指针.这可以使我们以任何方式遍历双链表,甚至可以忽略前后地在双链表中访问.下面的图示展示了一个双链表: 下面是节点类型的声明文件: double_linked_list_node.h #ifndef _DOUBLE_LINKED_LIST #define _DOUBLE_LINKED_LIST typedef struct NODE{ struct NODE * fwd; struct

数据结构(C达到)------- 双链表

双链表中的每个节点包含两个指针域,指针域包含其后继节点的内存地址,还有一个指针所存储的存储器地址其领域前驱节点. 双向链表结点的类型描写叙述: //双向链表的类型描写叙述 typedef int ElemType; typedef struct node{ ElemType data; struct node *prior,*next; }DuLNode,*DuLinkList; 当中.prior域存放的是其前驱结点的存储地址,next域存放的是其后继结点的存储地址. 双向链表有两个特点:一是能

Python与数据结构[0] -&gt; 链表[1] -&gt; 双链表与循环双链表的 Python 实现

双链表 / Doubly Linked List 目录 双链表 循环双链表 1 双链表 双链表和单链表的不同之处在于,双链表需要多增加一个域(C语言),即在Python中需要多增加一个属性,用于存储指向前一个结点的信息. Doubly linked list: node_1 <---> node_2 <---> node_3 完整代码 1 from linked_list import LinkedList, test 2 3 4 class NodeDual: 5 def __i