双链表和单链表性质相似只是在多加了一个前指针

1.定义结构体

typedef struct Node{
int data;
struct Node *prior;
struct Node *next;
}Node,*LinkedList;

2.比单链表一个指向

LNew->data = i;
L->next = LNew;
LNew->prior = L; // 比单链表多这一条
LNew->next = NULL;
L = LNew;

具体实现demo.c

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h> typedef struct Node{
int data;
struct Node *prior;
struct Node *next;
}Node,*LinkedList; LinkedList LinkedListInt(){
Node *Head,*L,*LNew;
int i;
Head = (Node *)malloc(sizeof(Node));
if(Head == NULL){
printf("申请空间失败\n");
exit(-);
} L = Head;
L->next = NULL; for(i=;i<;i++){
LNew = (Node *)malloc(sizeof(Node));
if(LNew == NULL){
printf("申请空间失败\n");
exit(-);
} LNew->data = i;
L->next = LNew;
LNew->prior = L;
LNew->next = NULL;
L = LNew;
} return Head;
} int main(int argc, char const *argv[]) {
/* code */
Node *p;
int i;
p = LinkedListInt();
p = p->next;
// 让p的前指针指向p,这样第一个有值元素就有前指针
p->prior = p; while(p != NULL){
//printf("%d,",p->prior->data);
printf("%d ",p->data);
//printf("%d ",p->next->data);
// 防止p指空报错
if(p->next != NULL){
p = p->next;
}else{
break;
}
} printf("\n");
// 测试指针能不能指回去
p = p->prior;
printf("%d ",p->data);
printf("\n"); return ;
}

C语言实现双链表(带头节点)的更多相关文章

  1. C语言实现单链表(带头节点)

    C语言在实现单链表存储时需要注意的几点: 1.定义结构体,typedef:用于给结构体另命名 // 定义结构体类型 typedef struct Node{ int data; struct Node ...

  2. c语言实现双链表的基本操作—增删改查

    //初始化 Node*InitList() { Node*head=(Node*)malloc(sizeof(Node)); if(NULL==head) { printf("内存分配失败! ...

  3. 数组、单链表和双链表介绍 以及 双向链表的C/C++/Java实现

    概要 线性表是一种线性结构,它是具有相同类型的n(n≥0)个数据元素组成的有限序列.本章先介绍线性表的几个基本组成部分:数组.单向链表.双向链表:随后给出双向链表的C.C++和Java三种语言的实现. ...

  4. 单链表&双链表的头插入&尾插入

    #include<stdio.h> #include"stdlib.h" struct student { int data; struct student *pnex ...

  5. C语言实现单链表节点的删除(带头结点)

    我在之前一篇博客<C语言实现单链表节点的删除(不带头结点)>中具体实现了怎样在一个不带头结点的单链表的删除一个节点,在这一篇博客中我改成了带头结点的单链表.代码演示样例上传至 https: ...

  6. C语言:根据形参c中指定的英文字母,按顺序打印出若干后继相邻字母,-主函数中放入一个带头节点的链表结构中,h指向链表的头节点。fun函数找出学生的最高分-使用插入排序法对字符串中的字符进行升序排序。-从文件中找到指定学号的学生数据,读入次学生数据,

    //根据形参c中指定的英文字母,按顺序打印出若干后继相邻字母,输出字母的大小与形参c一致,数量由形参d指定.例如:输入c为Y,d为4,则输出ZABC. #include <stdio.h> ...

  7. C语言:将带头节点的单向链表结点域中的数据从小到大排序。-求出单向链表结点(不包括头节点)数据域中的最大值。-将M*N的二维数组中的数据,按行依次放入一维数组,

    //函数fun功能是将带头节点的单向链表结点域中的数据从小到大排序. //相当于数组的冒泡排序. #include <stdio.h> #include <stdlib.h> ...

  8. C/C++语言实现单链表(带头结点)

    彻底理解链表中为何使用二级指针或者一级指针的引用 数据结构之链表-链表实现及常用操作(C++篇) C语言实现单链表,主要功能为空链表创建,链表初始化(头插法),链表元素读取,按位置插入,(有序链表)按 ...

  9. 在单链表和双链表中删除倒数第K个节点

    [说明]: 本文是左程云老师所著的<程序员面试代码指南>第二章中“在单链表和双链表中删除倒数第K个节点”这一题目的C++复现. 本文只包含问题描述.C++代码的实现以及简单的思路,不包含解 ...

随机推荐

  1. Tomcat 文件夹结构

    文件夹                                                          描写叙述 /bin                               ...

  2. 1. A + B Problem【easy】

    Write a function that add two numbers A and B. You should not use + or any arithmetic operators. Not ...

  3. web中文字体Font-family应该写什么?

    最佳实践是: font-family: Helvetica, Tahoma, Arial, "Microsoft YaHei", "微软雅黑",STXihei, ...

  4. 基于jdom 的 xmluti

    package cn.com.do1.wechat.common; import org.jdom.Attribute; import org.jdom.Document; import org.jd ...

  5. XML异步请求实例

    其实还是很格式化的: <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type&qu ...

  6. 文件模式设置用户ID/设置组ID/sticky bit_转

    S_ISUID  (04000)  set-user-ID (set process effective user ID on execve(2))S_ISGID  (02000)  set-grou ...

  7. 深度剖析ConcurrentHashMap(转)

    概述 还记得大学快毕业的时候要准备找工作了,然后就看各种面试相关的书籍,还记得很多面试书中都说到: HashMap是非线程安全的,HashTable是线程安全的. 那个时候没怎么写Java代码,所以根 ...

  8. Android基础总结(一)项目结构,事件

    Android项目的目录结构 Activity:应用被打开时显示的界面 src:项目代码 R.java:项目中所有资源文件的资源id Android.jar:Android的jar包,导入此包方可使用 ...

  9. nginx 的 autoindex on首页不显示的问题 按照下面几行要写上不然不行

    [root@test html]# vim ../conf/nginx.confworker_processes  1;events {    worker_connections  1024;}ht ...

  10. 【BZOJ】1628 && 1683: [Usaco2007 Demo]City skyline 城市地平线(单调栈)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1628 http://www.lydsy.com/JudgeOnline/problem.php?id ...