数据结构复习——线性表的链式存储实现(双向链表)
来源:互联网 发布:软件学院为什么分数低 编辑:程序博客网 时间:2024/06/05 23:01
其实与单向链表大同小异,只是多了一个前驱指针。操作起来多了几个小步骤而已。
#include<bits/stdc++.h>using namespace std;typedef struct Node * Nodeptr;typedef struct Node{ int data; //数据 struct Node *pre,*next; //指针} NODE; //NODE等价于struct Node,Nodeptr等价于struct Node *Nodeptr createLinklist()//创建{ int n,value; //记录创建节点的个数和值 Nodeptr Head=(Nodeptr)malloc(sizeof(Nodeptr));//创建头指针 if(Head==NULL) //判断失败操作 { printf("分配内存失败!\n"); exit(-1); } Nodeptr p=Head; //指针p始终指向表尾 Head->pre=NULL; printf("输入创建节点的个数:"); scanf("%d",&n); for(int i=0; i<n; i++) { scanf("%d",&value); Nodeptr NewNode=(Nodeptr)malloc(sizeof(NODE)); if(NewNode==NULL) { printf("分配内存失败!\n"); exit(-1); } NewNode->data=value; //值放入 NewNode->pre=p; p->next=NewNode; //指向新节点 p=NewNode; //仍然让p指向末尾 } p->next=NULL; return Head;}void traverseLinklist(Nodeptr Head)//遍历{ Nodeptr p=Head->next,q; while(p!=NULL) { printf("%d ",p->data); q=p; p=p->next; } printf("\n"); while(q!=Head){ printf("%d ",q->data); q=q->pre; } printf("\n"); return ;}void insertElement(Nodeptr Head,int pos, int value)//插入{ //将值为value的元素插入到pos位置 int i=0; Nodeptr p=Head; while(p!=NULL&&i<pos-1)//将指针定位到第pos-1个节点,其中可能位置不存在 { p=p->next; i++; } if(p==NULL||i>pos-1) { printf("位置不存在!\n"); return ; } Nodeptr NewNode=(Nodeptr)malloc(sizeof(Node));//分配内存 if(NewNode==NULL) { printf("分配内存失败!\n"); exit(-1); } NewNode->data=value; //赋值 Nodeptr q=p->next; //指向下一个节点 p->next=NewNode; NewNode->pre=p; NewNode->next=q; q->pre=NewNode; return ;}void deleteElement(Nodeptr Head,int pos)//删除{ //删除同上 int i=0; Nodeptr p=Head; while(p!=NULL&&i<pos-1) { p=p->next; i++; } if(p->next==NULL||i>pos-1) { printf("位置不存在!\n"); return ; } Nodeptr q=p->next,t=q->next;//需要删除q if(t!=NULL){ p->next=t; t->pre=p; } else p->next=t; free(q); q=NULL; return ;}int main(){ Nodeptr head=NULL; head=createLinklist(); traverseLinklist(head); insertElement(head,3,10); traverseLinklist(head); deleteElement(head,3); traverseLinklist(head); return 0;}十字链表挖坑待填。有时间的话,就实现以下吧。
0 0
- 数据结构复习——线性表的链式存储实现(双向链表)
- 数据结构复习——线性表的链式存储实现(单向链表)
- JAVA数据结构之线性表的链式存储结构——双向链表
- 数据结构:线性表的链式存储(双向链表)--Java实现
- 大话数据结构五:线性表的链式存储结构(双向链表)
- 大话数据结构五:线性表的链式存储结构(双向链表)
- 数据结构之线性表——链表的链式存储(链式描述)
- 【数据结构复习】线性表的链式存储--单链表
- 线性表的链式存储(双向链表)
- 数据结构复习—线性表的链式表示
- 数据结构复习——线性表的顺序存储实现
- 线性表的Java实现--链式存储(双向链表)
- 数据结构_线性表_链式存储_双向循环链表的基本操作
- 数据结构——线性表的链式存储
- 数据结构之线性表——栈的链式存储
- 数据结构之线性表——队列的链式存储
- 线性表的链式存储结构---双向链表
- 数据结构——线性表(链式存储)
- 全文检索引擎Solr系列——Solr核心概念、配置文件
- Arrays.asList()的删除问题
- 并发和并行的区别
- 【数据挖掘】:分位数-分位数图
- python学习之unicode编码
- 数据结构复习——线性表的链式存储实现(双向链表)
- studio项目是完全可以转换成eclipse的
- 2006 - MySQL server has gone away
- MainActivity
- Fast RCNN训练阶段代码解析
- 发邮件自动回复本机IP——python版本
- 《Thinkinginjava》第11章-持有对象
- 黑名单来电自动挂断
- 欢迎使用CSDN-markdown编辑器