双向循环链表就是形成两个环,注意每个环的首尾相连基本就可以了。
程序中采用尾插法进行添加节点。
#include<stdio.h>
#include<stdlib.h>
#define element int
typedef struct Node{
element data;
struct Node *next;
struct Node *prior;
}*pNode; //build a new double loop list
element Init_list(pNode p)
{
//pNode r=NULL;
//*p=(pNode)malloc(sizeof(pNode));
p->next=p;
p->prior=p;
return ;
}
//creat a new double loop list
element Build_list(pNode *L,element num)
{
pNode p=NULL;
pNode r=NULL;
int i=;
int j=;
p=*L;
for(j=;j<num;j++)
{
r=(pNode)malloc(sizeof(pNode));
r->data=j;
p->next=r;
r->prior=p;
r->next=p;
p->prior=r;
printf("flag:%d\n",p->next->data);
p=r;
//printf("flag:%d\n",p->next->data);
}
return ;
}
element Print_list(pNode L)
{
if(!L)
{
printf("it is empty\n");
}
pNode p=L;
p=p->next;
int i=;
while(i<)
{
printf("data:%d\n",p->data);
p=p->next;
i++;
} return ;
}
int main()
{
pNode P=NULL;
pNode M=NULL;
P=(pNode)malloc(sizeof(pNode));
Init_list(P);
M=Build_list(&P,);
Print_list(P);
return ;
}
c语言编程之双向循环链表的更多相关文章
-
【C语言教程】“双向循环链表”学习总结和C语言代码实现!
双向循环链表 定义 双向循环链表和它名字的表意一样,就是把双向链表的两头连接,使其成为了一个环状链表.只需要将表中最后一个节点的next指针指向头节点,头节点的prior指针指向尾节点,链表就能成环儿 ...
-
C语言通用双向循环链表操作函数集
说明 相比Linux内核链表宿主结构可有多个链表结构的优点,本函数集侧重封装性和易用性,而灵活性和效率有所降低. 可基于该函数集方便地构造栈或队列集. 本函数集暂未考虑并发保护. 一 ...
-
双向循环链表(C语言描述)(四)
下面以一个电子英汉词典程序(以下简称电子词典)为例,应用双向循环链表.分离数据结构,可以使逻辑代码独立于数据结构操作代码,程序结构更清晰,代码更简洁:电子词典的增.删.查.改操作分别对应于链表的插入. ...
-
一种神奇的双向循环链表C语言实现
最近在看ucore操作系统的实验指导.里面提要一个双向循环链表的数据结构,挺有意思的. 其实这个数据结构本身并不复杂.在普通链表的基础上加一个前向指针,我们就得到了双向链表,再把头尾节点连起来就是双向 ...
-
1.Go语言copy函数、sort排序、双向链表、list操作和双向循环链表
1.1.copy函数 通过copy函数可以把一个切片内容复制到另一个切片中 (1)把长切片拷贝到短切片中 package main import "fmt" func main() ...
-
双向循环链表(C语言描述)(一)
双向循环链表是链表的一种,它的每个节点也包含数据域和指针域.为了方便程序维护,可以单独为数据域定义一种数据类型,这里以整型为例: typedef int LinkedListData; 双向循环链表( ...
-
双向循环链表涉及双向指针的基本操作(C语言)
链表大概分为有无头指针,有无尾指针,是否循环,单向还是双向, 这些都很简单,前提是你要把指针和单链表理解透彻.这些都是基于单链表 的变形,要根据实际问题,选择链表的类型. 头指针的指针域储存着储存头节 ...
-
c语言双向循环链表
双向循环链表,先来说说双向链表,双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱.所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继 ...
-
(C语言版)链表(四)——实现双向循环链表创建、插入、删除、释放内存等简单操作
双向循环链表是基于双向链表的基础上实现的,和双向链表的操作差不多,唯一的区别就是它是个循环的链表,通过每个节点的两个指针把它们扣在一起组成一个环状.所以呢,每个节点都有前驱节点和后继节点(包括头节点和 ...
随机推荐
-
undefined
概述 undefined有多重角色,通常情况下,我们所说的undefined都指的是全局对象的一个属性"undefined". 语法 undefined 描述 在JavaScrip ...
-
JavaScript有哪些延迟加载的方式?
defer和async,动态创建DOM方式(用得最多),按需异步载入js.
-
Jquery 实现点击一个页面跳转后在另外一个页面显示指定位置
<script> $(function(){ var isTarget = '<?php echo $_GET['target']; ?>'; if (isTarget != ...
- centos6.5 eclipse C/C++开发环境
-
IOS开发自定义tableviewcell的注意点&#128516;
自定义tableviewcell 1.xib,nib拖控件:awakefromnib: 设置2,不拖控件:- (instancetype)initWithStyle:(UITableViewCellS ...
-
java 中的值传递和引用传递
public class PassValue { /** * 值传递 基本数据类型参数 * 值传递:方法调用时,实际参数吧他的值传递给对应的形式参数,方法执行中形式参数值的改变不影响实际参数的值 */ ...
-
[SDOI2016]排列计数
Description 求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[i] 的值为 i,则称 i 是稳定的.序列恰好有 m 个数是 ...
-
Linux常用基本命令:tr-替换或者删除字符
tr命令 作用:从标准输入中替换,缩减或者删除字符,并将结果输出到标准输出 格式:tr [option] [set1] [set2] tr [选项] [字符1] [字符2] 把y替换m, o替换e,并 ...
-
Centos 7.0 Firewall-cmd 使用方式
开启端口命令 输入firewall-cmd --query-port=6379/tcp,如果返回结果为no,那么证明6379端口确实没有开启.输入firewall-cmd --add-port=637 ...
-
JMeter组件之BeanShell PostProcessor的使用
1. 场景一:获取请求响应中的数据,并保存 import com.alibaba.fastjson.*; // 引入包.这个包需要先放在:<安装目录>\apache-jmeter-3.2 ...