C语言线性表之双向循环链表
来源:互联网 发布:centos认不到raid硬盘 编辑:程序博客网 时间:2024/04/29 20:57
#include<stdio.h>#include<stdlib.h>/* 结构体:双向循环链表 */typedef struct DuLNode{ int data; struct DuLNode *prior, *next;//内部有两个指针:前、后 }DuLNode, *DuLinkList;/* 创建双向链表 */DuLinkList CreatDuLinkList(int *a){ DuLinkList L = (DuLNode*)malloc(sizeof(DuLNode));//申请链表头空间 L->prior = L;//prior指向自己 L->data = a[0];//给数据体赋值 L->next = L;//next指向自己 DuLNode *p = L;//声明指针指向链表头 int i = 1; DuLNode *node;//新建节点 do{ node = (DuLNode*)malloc(sizeof(DuLNode));//新建节点分配内存 p->next = node;//表头指针的next指向新节点 node->prior = p;//节点指针prior指向上一个节点 node->data = a[i];//节点赋值 L->prior = node;//表头指向表尾 node->next = L;//表尾指向表头 p = node;//表尾更新 i++;// }while(a[i]!=0); return L;}/* 显示双向循环链表 */void show(DuLinkList L, int flag){ DuLNode *p;//声明一个指针 p = L;//指针指向链表头 if(flag){ printf("show-prior: ");//如果顺序输出(next) }else{ printf("show- next: ");//否则逆序输出(prior) } do{ printf("%d - ",p->data);//输出节点数据 if(flag){ p = p->next;//指向下一个节点 }else{ p=p->prior;//指向上一个节点 } }while(p != L);//如果又回到表头,则结束循环 printf("\n");//}/* 在双向循环链表中插入一个节点 */void insert(DuLinkList L, int index, int x){ int i; for(i=0;i<index-1;i++){//先找到要插入节点的位置 L = L->next;// } DuLNode *p = L->next;//指针指向下一个节点 DuLNode *node = (DuLNode*)malloc(sizeof(DuLNode));//申请一个新节点内存 node->data = x;//给节点数据域赋值 L->next = node;//上个节点的next指向新节点 node->prior = L;//新节点的prior指向上个节点 node->next = p;//新节点next指向下一个节点 p->prior = node;//上一个节点的prior指向新节点}/* 删除节点 */void Delete(DuLinkList L, int index){ int i; for(i=0;i<index-1;i++){//寻找到要删除的位置 L = L->next;// } DuLNode *p = L->next->next;//跳过要删除的节点 L->next = p;//重新建立连接 p->prior = L;//重新建立连接}/* */int main(int argc, char*argv[]){ int a[10] = {1,2,3,4,5,6,7,8,9,0}; DuLinkList L = CreatDuLinkList(a); show(L,1); show(L,0); insert(L,9,99); show(L,1); Delete(L,3); Delete(L,2); show(L,1); return 0;}
运行结果:
-bash-4.1$ gcc -o a Demo_05_DuLinkList.c-bash-4.1$ ./ashow-prior: 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - show- next: 1 - 9 - 8 - 7 - 6 - 5 - 4 - 3 - 2 - show-prior: 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 99 - show-prior: 1 - 2 - 5 - 6 - 7 - 8 - 9 - 99 - -bash-4.1$
阅读全文
0 0
- C语言线性表之双向循环链表
- 线性表之循环链表、双向链表(三)--C语言实现
- 线性表之双向循环链表
- (续)线性表之双向链表(C语言实现)
- C语言线性表之循环单链表
- C语言 双向循环链表的实现和结构 链表 线性表的链式实现
- C语言实现双向循环链表
- C语言中的双向循环链表
- C语言实现双向循环链表
- C语言实现双向循环链表
- C语言实现双向循环链表
- C语言双向循环链表实现
- c语言写双向循环链表
- C语言实现双向循环链表
- c语言实现双向循环链表
- 大话数据-—线性表之循环/双向链表
- 数据结构之线性结构--双向循环链表
- C语言基础—数据结构之单向循环链表和双向循环链表
- Tensorflow
- IDEA 运行 Hadoop WordCount示例
- 1025螺旋矩阵(25).cpp
- CVPR 2017 Multiple People Tracking by Lifted Multicut and Person Re-identification 阅读笔记
- Maven pom文件的继承
- C语言线性表之双向循环链表
- ArrayList集合(一)--源码
- 程序员为什么加班太多?有可能是代码写得烂……
- 看我如何用 Python 实现一个轻量型数据库
- Agri-Net(最小生成树)
- FFmpeg之AVFormatContext
- 处理对象的多种状态及其相互转换——状态模式(六)
- 论文阅读学习
- 汉诺塔问题