双链表的结构及其操作
来源:互联网 发布:mm商场软件下载 编辑:程序博客网 时间:2024/06/15 22:24
双链表的结构及其操作
/** * 作者:LinX 2017/6/9- * * 内容:双链表的结构以及操作 * */ #include <stdio.h> #include <stdlib.h> typedef int ElemType; typedef struct DNode { ElemType data; struct DNode *prior; struct DNode *next; }DNode,DLinkList; /*基本操作*/ DNode* InitList(); //初始化双链表 void CreateListR(DNode* head,int n); //用尾插法创建有n个节点(除去头节点)的双链表 ElemType DelNode(DLinkList *L,int pos); //删除某个节点,并返回删除节点的数据 void InsList(DLinkList *L,int pos,ElemType e); // 插入数据为e的节点到pos后面的位置 int isEmpty(DLinkList* L); //判断双链表是否为空 DNode* findNode(DLinkList *L,int pos); //找到pos位置上的节点并返回 void printList(DLinkList* L); //打印双链表 int main() {DLinkList *L=InitList();CreateListR(L,4);printList(L);InsList(L,2,10);printList(L);DelNode(L,4);printList(L); } /*初始化节点*/ DNode* InitList() { DNode *head; head=(DNode *) malloc (sizeof(DNode)); head->next=head;head->prior=head; } /*删除指定位置的节点*/ ElemType DelNode(DLinkList *L,int pos) { DNode *p,*q; if(isEmpty(L)==1) { printf("\n表空\n"); return; } p=findNode(L,pos-1); printf("%d\n",p->data); q=p->next; p->next=q->next; if(q->next!=NULL) { p=q->next->prior; } free(q); } /*找到pos位置上的节点并返回*/ DNode* findNode(DLinkList *L,int pos) { int i; DNode *p; p=L->next; for(i=0;i<pos;i++) {p=p->next; } return p; } /*向pos位置后面插入数据为e的节点*/ void InsList(DLinkList *L,int pos,ElemType e) { DNode *s,*p; if(isEmpty(L)) { printf("\n空表\n"); return; } s=(DNode *)malloc(sizeof(DNode)); s->data=e; s->next=NULL; p=findNode(L,pos-1); s->next=p->next;p->next=s;s->prior=p;p->next->prior=s; } /*创建节点个数为n的双链表*/ void CreateListR(DNode* head,int n) { DNode *r,*s; int i; ElemType e; r=head; for(i=0;i<n;i++) { scanf("%d",&e); s=(DNode *)malloc(sizeof(DNode));s->data=e;r->next=s;s->prior=r;r=s; } r->next=NULL; } /*打印双链表*/ void printList(DLinkList *L) { DNode* p; if(isEmpty(L)) { printf("\n空表\n"); return; } p=L->next; while(p!=NULL) { printf("%d ",p->data); p=p->next; } printf("\n"); } /*判空*/ int isEmpty(DLinkList* L) { if(L->next==L&&L->prior==L) { return 1; } return 0; }
阅读全文
1 0
- 双链表的结构及其操作
- 单链表的结构及其操作
- 栈的结构及其操作
- 单链表的存储结构及其基本操作
- 顺序表的结构及其操作
- 循环链表的结构及其操作
- 循环队列的结构及其操作
- 链队列的结构及其操作
- inode结构及其操作
- 单链表的存储结构及其基本操作的实现
- 结构体及其基本操作
- 程序实现二叉树的结构及其操作
- 程序实现线索二叉树的结构及其操作
- net_device结构体及其相关的操作函数
- Linux系统结构及其操作界面
- 作业2 链式存储结构及其操作
- 路由器的作用及其结构
- Linux块设备驱动(1)---块驱动中相关的结构体及其操作
- 【数据结构 链表排序】
- memset函数 memcpy函数 memcmp函数------ 函数使用笔记
- 2017.06.08-2017.06.11回顾 欺诈事件 SQL不足
- Java学习路线
- ListView滑动触发addTextChangedListener事件
- 双链表的结构及其操作
- Canvas学习系列一:初识canvas
- go语言学习-windows下开发环境的搭建
- 经典算法分析与设计——突击战
- 数据库常见面试题总结
- 【java基础 二】---面向对象思想(基础)
- 使用Spring boot,Kotlin,Mysql建立外键,关联表
- matlab的控制流
- 单点登陆SSO原理