#include <stdio.h>
#include <stdlib.h>
#include<stdbool.h>//双向链表
typedef int Elemtype;
typedef struct DNode
{Elemtype data;struct DNode *prior,*next;
} DNode,*DLinkList;//尾插法创建链表
DLinkList CreateList()
{int x;DLinkList head=(DLinkList)malloc(sizeof(DLinkList));//创建双向链表,头节点DNode* p=head,*s;//p为遍历节点,s为当前节点p->prior=NULL;printf("创建链表,输入9999表示结束\n");scanf("%d",&x);while(x!=9999){s=(DNode*)malloc(sizeof(DNode*));s->data=x;s->prior=p;p->next=s;p=s;scanf("%d",&x);}s->next=NULL;//不要忘记制空尾指针return head;//返回头节点
}//遍历链表
void PrintList(DLinkList L)
{DNode *p;p=L->next;//找到头节点下一个节点printf("链表元素如下:\n");while(p){printf("%d<---->",p->data);p=p->next;}printf("\n");
}//双链表头插法
DLinkList InsertListHead(DLinkList L,Elemtype e)
{DNode *p=(DNode*)malloc(sizeof(DNode*));p->data=e;p->prior==L;p->next=L->next;if(p->next!=NULL){L->next->prior=p;}L->next=p;return L;
}
//队尾插入
DLinkList InsertListTail(DLinkList L,Elemtype e)
{DNode *s=(DNode*)malloc(sizeof(DNode*));//s为待插入节点DNode *p=L->next;//p为遍历节点while(p->next){p=p->next;}p->next=s;s->data=e;s->prior=p;s->next=NULL;return L;
}//获取链表长度
int GetLength(DLinkList L)
{int len=0;DNode *r=(DNode*)malloc(sizeof(DNode*));r=L->next;while(r){r=r->next;len++;}return len;
}//在指定位置插入节点
bool  InsertPosition(DLinkList L,int pos,Elemtype e)
{if(pos<1||pos>GetLength(L)+1)return false;DNode *r,*n;//r遍历节点n=(DNode*)malloc(sizeof(DNode*));//插入节点n->data=e;n->next=NULL;r=L;while(--pos>0){r=r->next;}if(r->next==NULL) //在结尾插入{r->next=n;n->prior=r;return true;}n->next=r->next;r->next->prior=n;r->next=n;n->prior=r;return true;
}
//删除指定节点元素
bool DeletePosition(DLinkList L,int pos,Elemtype *e)
{if(pos<1||pos>GetLength(L))return false;DNode *r=L,*p;//r遍历节点,p为待删除节点while(--pos){r=r->next;}p=r->next;*e=p->data;if(p->next==NULL){r->next=NULL;free(p);return true;}r->next=p->next;p->next->prior=r;free(p);return true;}
int main()
{DLinkList L=CreateList();PrintList(L);printf("头插入节点\n");InsertListHead(L,-1);PrintList(L);printf("尾插法插入节点\n");InsertListTail(L,-1);PrintList(L);printf("链表长度  %d\n",GetLength(L));printf("在指定位置插入元素\n");InsertPosition(L,5,-99);PrintList(L);printf("删除指定位置元素\n");int *e;DeletePosition(L,5,e);printf("删除元素为:%d\n",*e);PrintList(L);return 0;
}

双向链表基本操作(C语言)相关推荐

  1. 详解双向链表的基本操作(C语言)

    工科生一枚,热衷于底层技术开发,有强烈的好奇心,感兴趣内容包括单片机,嵌入式Linux,Uboot等,欢迎学习交流! 爱好跑步,打篮球,睡觉. 欢迎加我QQ1500836631(备注CSDN),一起学 ...

  2. matlab 双向链表,双向链表基本操作(C语言实现)

    前面学习了如何创建一个双向链表,本节学习有关双向链表的一些基本操作,即如何在双向链表中添加.删除.查找或更改数据元素. 本节知识基于已熟练掌握双向链表创建过程的基础上,我们继续上节所创建的双向链表来学 ...

  3. 8.C语言数据结构 双向链表基本操作

    前面学习了如何创建一个双向链表,本节学习有关双向链表的一些基本操作,即如何在双向链表中添加.删除.查找或更改数据元素. 本节知识基于已熟练掌握双向链表创建过程的基础上,我们继续上节所创建的双向链表来学 ...

  4. 双向链表基本操作(C语言实现)详解

    前面学习了如何创建一个双向链表,本节学习有关双向链表的一些基本操作,即如何在双向链表中添加.删除.查找或更改数据元素. 本节知识基于已熟练掌握双向链表创建过程的基础上,我们继续上节所创建的双向链表来学 ...

  5. 数据结构之【队列】的基本操作C语言实现

    直接上图: 循环队列的声明: 0.循环队列的声明 循环队列的基本操作: 1.InitQueue(&Q)(构造一个空队列) 2.DestroyQueue(&Q)(销毁队列Q) 3.Cle ...

  6. 数据结构之【栈】的基本操作C语言实现

    引题:        很多人都把[栈]描述成[弹匣],但我总感觉有点不恰当,因为弹匣从上端[装弹]之后,子弹总是在匣的上层:而元素[进栈]之后,总在栈的下面.        我觉得还是描述成[从下往上 ...

  7. php双向链表,双向链表的GO语言实现

    一.什么是双向链表 和单链表比较,双向链表的元素不但知道自己的下线,还知道自己的上线(越来越像传销组织了).小煤车开起来,图里面可以看出,每个车厢除了一个指向后面车厢的箭头外,还有一个指向前面车厢的箭 ...

  8. 字符串基本操作 c语言,数据结构C语言字符串的基本操作.doc

    数据结构C语言字符串的基本操作 串的基本操作 #include #include #include #define m 100 typedef struct{ char ch[m]; int leng ...

  9. 链表-双向链表(C语言)

    基本操作 (1)头插法和尾插法进行初始化 (2)查找值为x的结点 (3)按照序号查找结点值 (4)双向链表的插入操作(在第i位插入n) (5)删除第i个结点 (6)打印链表所有结点的值 版本1 #de ...

最新文章

  1. LDialog基于DialogFragment封装的库,也许是一个Nice的库
  2. 【离散化】【差分】幻灯片(jzoj 1609)
  3. 史上最全java架构师技能图谱(上)
  4. 机器学习笔记六之神经网络的学习
  5. ie 调用java的时候报错,关于java的applet在网页中打开的时候出错
  6. SPFA求最短路——Bellman-Ford算法的优化
  7. Swift学习笔记八
  8. 机器学习模型实战!如何从 900 万张图片中对 600 类照片进行分类? | 技术头条...
  9. linux 精简桌面,Linux桌面环境之轻型简易妙招(摘自toy)
  10. 影响计算机启动硬件,电脑开机速度跟哪些硬件有关。
  11. 计算机浏览器,有哪些好用的PC浏览器?
  12. 高频故障-office背景有水印的解决方案
  13. YOLOV3 config理解
  14. 关于淘淘商城的一些基本说明
  15. linux 4.6发布时间,Linux Kernel 4.6的第4个维护版本发布
  16. java编程有哪些优点呢
  17. Springboot 启动命令中–spring.config.location不生效问题
  18. Ubiquiti MAC Address Changer 3.0 Crack
  19. VS2015 安装.NET Core
  20. android app调用百度地图-百度地图sdk配置篇

热门文章

  1. PTA 整除光棍 (20 分) Java (BigInteger简单解题)
  2. route add 通过路由实现双网配置
  3. 从“青年创业基金”说起
  4. spring-mvc引入jackson-dataformat-xml依赖后部分接口返回xml
  5. 00942 oracle_Oracle ODI报错-ORA-00942: 表或视图不存在,求解决方案?
  6. java eop_javashop-eop
  7. S3C2440之裸机程序烧录(eop+Jlink)
  8. 转载 前端基础知识体系 一个新手的学习之路
  9. 深度优先搜索python
  10. mysql导入数据库成功但是无内容