`
jaychang
  • 浏览: 717867 次
  • 性别: Icon_minigender_1
  • 来自: 嘉兴
社区版块
存档分类
最新评论

循环双链表的增删

 
阅读更多
#include<stdio.h>
#include<stdlib.h>
//#include<string.h>
#include<iostream>

using namespace std;

typedef struct Node{
  char ch;
  Node * prior;
  Node * next;
}Node,* Linklist;

//构建循环双链表
Node * createRoteLinklist()
{
  Linklist L=(Node *)malloc(sizeof(Node));
  Node *r;char _char;
  L->ch='$';r=L;
  cin>>_char;
  while(_char!='$')
  {
     Node *s=(Node *)malloc(sizeof(Node));
     s->ch=_char;
     r->next=s;
     s->prior=r;
     r=r->next;
     cin>>_char;
  }
  //free(s);
  r->next=L;
  L->prior=r;
  return L;
}

Node* insertNode(char ch,Node * rear,Linklist L)
{
  Node *s=(Node *)malloc(sizeof(Node));
  s->ch=ch;
  rear->next=s;
  s->prior=rear;
  s->next=L;
  L->prior=s;
  return rear=rear->next;
}

//头尾同时查找要删除的元素
int deleteNode(char ch,Node *rear,Linklist L)
{
  Node *p=L->next;
  Node *q=rear;
  while(p!=q)
  {
     if(p->ch==ch||q->ch==ch){
        if(p->ch==ch){
           p->prior->next=p->next;
           p->next->prior=p->prior;
           free(p);
           return 0 ;
        }
        else if(q->ch==ch){
           q->prior->next=q->next;
           q->next->prior=q->prior;
           free(q);
           return 0 ;
        }
    }
    p=p->next;q=q->prior;
  }
  cout<<"delete Node can not found\n";
  return 0;
}

//输出当前链表的情况
void procOutput(Linklist L,Node * rear)
{
  Node * p=L->next;
  int i=0;
  cout<<"当前结点情况为:\n";
  while(p!=L)
  {
     cout<<"ID"<<++i<<":"<<p->ch<<" ";
     p=p->next;
  }
  cout<<"\n";
}

int main()
{
  char ch;
  Linklist L=createRoteLinklist();
  Node * rear=L->prior;
  procOutput(L,rear);
  cin>>ch;
  rear= insertNode(ch,rear,L);//尾部插入一个结点
  procOutput(L,rear);
  cin>>ch;
  deleteNode(ch,rear,L);//删除结点
  procOutput(L,rear);
  return 0;
}
 
分享到:
评论

相关推荐

    C/C++链表增删改查排序操作

    使用C++实现双向循环链表的增删改查排序等操作,可查看个人博客的【[数据结构和算法]C/C++双向循环链表实现(增删改查排序)】--链接https://blog.csdn.net/slimmm/article/details/84317806

    双向循环链表、增删查改、判断回文、排序、论文+代码

    C语言 双向循环链表,增删查改,判断回文,排序,论文,代码,自写可用,vs2013,课程设计,答辩

    数据结构顺序表和链表(超详细)

    此压缩包为1、无头+单向+非循环链表增删查改实现// 动态申请一个结点// 单链表打印// 单链表尾插// 单链表的头插// 单链表的尾删// 单链表头删// 单链表查找// 单链表在pos位置之后插入x// 单链表删除pos位置之后的...

    C语言之航空信息查询系统-使用双向循环链表实现系统的增删改查操作

    C语言之航空信息查询系统-使用双向循环链表实现系统的增删改查操作

    关于双向链表的增删改查和排序的C++实现

    双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表...

    C语言数据结构库(队列,栈,链表,树的增删改查)

    本库为C语言(Linux环境下编写的适用于所有C的数据结构库函数)。包括了最基础也是最常用的增删改查功能函数,队列,栈,链表(单链表,双链表,循环链表等都有),树的增删改查函数。程序可靠。

    基于双向循环链表实现的学生教务管理系统.rar

    基于双向链表实现的教务管理系统 增删改查

    双向循环链表.zip

    对c语言中双向循环链表的简单应用。能实现链表中的(前插人)后插入,查找,删除,移动的相关功能,并配有较为详细的注释,还画有数据和指针的流向图,帮助你快速理解对于链表中 各指针的指向关系。(测试时需将函数...

    C语言之双向链表详解及实例代码

    双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表...

    数据结构和算法必知必会的50个代码实现.zip

    实现单链表、循环链表、双向链表,支持增删操作 实现单链表反转 实现两个有序的链表合并为一个有序链表 实现求链表的中间结点 栈 用数组实现一个顺序栈 用链表实现一个链式栈 编程模拟实现一个浏览器的前进、...

    学生管理系统

    学生管理系统的双向循环链表的使用,对双向循环链表的增、删、改、查、排序等

    50个必会的数据结构及算法实现源码

    问题:实现单链表、循环链表、双向链表,支持增删操作 问题:实现单链表反转 问题:实现两个有序的链表合并为一个有序链表 问题:实现求链表的中间结点 栈 问题:用数组实现一个顺序栈 问题:用链表实现一个...

    C#集合遍历时删除和增加元素的方法

    对于这种情况,遍历不能按照原来那种方式去做了,而且C#中的集合对于这类有增删动作的遍历,也不支持foreach循环。 有三种办法可以解决这一问题。 第一种方法:使用C#的LinkedList&lt;&gt;双链表。我原来设想,把原来...

    数据结构和算法必知必会的50个代码实现

    ## 链表* 实现单链表、循环链表、双向链表,支持增删操作* 实现单链表反转* 实现两个有序的链表合并为一个有序链表* 实现求链表的中间结点 ## 栈* 用数组实现一个顺序栈* 用链表实现一个链式栈* 编程模拟实现一个...

    2第二章 线性表.zip

    包含 顺序表(增删改查插、创建和输出) 单链表(增删改查插、创建和输出) 循环链表(创建和输出) 双向链表(增删插、创建和输出) 静态链表(创建和输出)

    leetcode爬楼梯排列组合解法-algorithm_practice:对数据结构、算法相关的编程实践(DataStructureandAl

    支持增删操作 实现单链表反转 实现两个有序的链表合并为一个有序链表 实现求链表的中间结点 实现:assignment1 【任务2 - 栈、队列与递归】 1、栈 用数组实现一个顺序栈 用链表实现一个链式栈 编程模拟实现一个...

    java集合详解与总结

    List: 有顺序的,元素可以重复 ...LinkedList:底层用双向循环链表 实现的List 特点:查询效率低,增删效率高 Vector: 底层用数组实现List接口的另一个类 特点:重量级,占据更多的系统开销 线程安全

    validnumberleetcode自动机-LearingTripofNoah:我自己的学习之旅,天天学习至此方休

    实现单链表、循环链表、双向链表,支持增删操作 实现单链表反转 实现两个有序的链表合并为一个有序链表 实现求链表的中间结点 附加练习: Three Sum(求三数之和) 英文版: 中文版: Majority Element(求众数) ...

    算法:数据结构和算法必知必会的50个代码实现

    实现单链表,循环链表,双向链表,支持增删操作 实现单链表反转 实现两个有序的链表合并为一个有序链表 实现求链表的中间结点 栈 用层叠实现一个顺序栈 用链表实现一个链式栈 编程模拟实现一个浏览器的前进,后退...

    leetcode有效期-algorithmTask:算法任务

    实现单链表、循环链表、双向链表,支持增删操作 实现单链表反转 实现两个有序的链表合并为一个有序链表 实现求链表的中间结点 【对应的 LeetCode 练习题】 Three Sum(求三数之和) 英文版:...

Global site tag (gtag.js) - Google Analytics