`
lgh1992314
  • 浏览: 315625 次
文章分类
社区版块
存档分类
最新评论

双链表基本操作

 
阅读更多
#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include <conio.h> 
/*c++实现双链表的基本操作*/
using namespace std;
typedef struct student
{
        int data;
        struct student *pre;
        struct student *next;
}dnode;
//创立链表 
dnode *creat()
{
      dnode *head,*p,*s;
      int x,cycle=1;
      head=(dnode *)malloc(sizeof(dnode));
      p=head;
      while(cycle)
      {
                  cout<<"please input the data!"<<endl;
                  cin>>x;
                  if(x!=0)
                  {
                          s=(dnode *)malloc(sizeof(dnode));
                          s->data=x;
                          p->next=s;
                          s->pre=p;
                          p=s;
                  }
                  else
                  cycle=0;
      }
      head=head->next;
      head->pre=NULL;
      p->next=NULL;
      return head;
}
//打印链表 
void print(dnode *head)
{
     dnode *p,*s;
     p=head;
     cout<<"正序打印双链表:"<<endl; 
     while(p->next!=NULL)
     {
           cout<<p->data<<" ";
           p=p->next;
     }
     cout<<p->data<<endl;
     cout<<"逆序打印双链表:"<<endl;
     while(p->pre!=NULL)
     {
            cout<<p->data<<" ";
            p=p->pre;
     }               
     cout<<p->data<<endl; 
     
}
//双链表插入节点
dnode *insert(dnode *head,int num)
{
      dnode *p0,*p1;
      p1=head;
      p0=(dnode *)malloc(sizeof(dnode));
      p0->data=num;
      while(p0->data>p1->data&&p1->next!=NULL)
      {
            p1=p1->next;
      }
      if(p0->data<=p1->data)
      {
             if(head==p1)
             {
                         p0->next=p1;
                         p1->pre=p0;
                         head=p0;
             }
             else
             {
                 p1->pre->next=p0;
                 p0->next=p1;
                 p0->pre=p1->pre;
                 p1->pre=p0;
             }
      }
      else
      {
          p1->next=p0;
          p0->pre=p1;
          p0->next=NULL;
      }
      return head;
} 
//删除指定的节点
dnode *del(dnode *head,int num)
{
      dnode *p1,*p2;
      p1=head;
      while(num!=p1->data&&p1->next!=NULL)
       p1=p1->next;
      if(num==p1->data)
      {
                      if(p1==head)
                      {
                                  head=head->next;
                                  head->pre=NULL;
                                  free(p1);
                      } 
                      else if(p1->next==NULL)
                      {
                                  p1->pre->next=NULL;
                                  free(p1);
                      }
                      else
                      {
                                  p1->next->pre=p1->pre;
                                  p1->pre->next=p1->next;
                                  free(p1);           
                      }
      }
      else
      {
          cout<<"没有指定的节点"<<endl;
      }
      return head;
} 
int main(int argc, char *argv[])
{
    int x;
    dnode *head=creat();
    print(head);
    cout<<"输入要插入的数字:"<<endl;
    cin>>x;
    head=insert(head,x);
    print(head);
    cout<<"输入要删除的数字:"<<endl;
    cin>>x;
    head=del(head,x);
    print(head);
    system("PAUSE");
    return EXIT_SUCCESS;
}

分享到:
评论

相关推荐

    双链表的基本操作(创建,插入,删除,读取等)

    本程序是关于双链表基本操作的实现,包括创建、插入、删除和读取节点等关键功能。 首先,我们来看如何创建双链表。创建双链表通常从一个空链表开始,然后逐步添加节点。在程序中,我们首先定义一个数组,这个数组将...

    双向链表基本操作.cpp

    双向链表基本操作.cpp

    双向链表及其基本操作

    C语言,实现双向链表以及其基本操作,基本操作:链表初始化、创建、查询、删除、释放,查询和删除均有两种方式,一种是按照值,另一种是按照结点的序号。

    双向链表基本操作

    输入多个字符,用顺序表保存,实现对表的操作,实现初始化,求表长度,求表中的第i个结点,输入一个字符,查找对应的结点,插入一个结点,删除一个结点,排序

    双向链表 基本操作 完整

    本教程将深入探讨双向链表的基本操作,基于提供的"Base_operater_of_double_List"文件,我们可以期待学习到以下关键知识点: 1. 双向链表的结构:每个节点在双向链表中包含两个指针,一个指向下一个节点(后继),...

    C语言双向链表基本操作

    下面我们将详细探讨如何用C语言实现双向链表的基本操作,以及如何结合插入排序法实现基于双向链表的升序排序。 首先,双向链表的结构定义是关键。我们需要创建一个结构体来存储数据和两个指针,分别指向前后节点: ...

    双循环链表的基本操作

    双循环链表的初始化 创建 插入 删除 源代码

    线性表(双链表)的基本操作实现

    在本次课程设计中,我们主要实现了线性表(双链表)的基本操作,包括创建双链表、查找双链表中的元素、插入双链表中的元素、删除双链表中的元素等工作。 双链表是一种特殊的线性表,它具有双向链接的特点,克服了...

    一个关于双向链表的基本操作程序

    本程序是一个关于双向链表的操作,包括插入节点,删除节点,遍历等

    数据结构的双链表算法

    在提供的压缩包文件中,"双链表"很可能是包含了C++源代码的文件,用于演示双链表的实现和基本操作。源代码可能会包括节点结构体的定义、链表类的实现以及示例操作的主函数。通过阅读和理解这段代码,你可以更好地...

    链表基本操作源码

    以下是对链表基本操作的详细讲解: 1. **链表的定义** 链表由一系列节点组成,每个节点包含数据和指向下一个节点的指针。对于双向链表,每个节点还包含一个指向前一个节点的指针。在C语言中,链表节点(或称为结点...

    单链表、双链表、循环链表的操作

    链表可以分为单链表、双链表和循环链表三种,下面我们将详细介绍这些链表的操作。 单链表 单链表是一种基本的链表结构,其中每个节点只有一个指针指向下一个节点。单链表的实现可以通过结构体来实现,如上面的代码...

    数据结构-双向链表

    本文将深入探讨双向链表的概念,实现,以及如何进行基本操作。 双向链表,顾名思义,是一种链式存储结构,其中每个节点包含两个指针,一个指向前一个节点,另一个指向后一个节点。与单向链表相比,双向链表允许双向...

    双向链表的基本操作建立,插入,删除

    以上就是关于双向链表的基本操作,包括建立、插入、删除以及判断对称性的详细说明。在实际应用中,双向链表常用于实现高效的迭代器、缓存系统、数据结构如LRU等,因为它提供了向前和向后的遍历能力。通过熟练掌握...

    有用的双链表C++源程序

    简单的双链表基本操作,插入、删除,但不会的时候可以参考一下,是C++描述程序

    [实验1]双链表与多项式.cpp

    编写使用freelist 的带头、尾结点的双向链表类的定义,实现双向链表的基本操作。 2. 利用双向链表实现2个一元多项式的加法和乘法运算,运算结果得到的链表要求按照指数降序排列的多项式。 3. 最后提交完整的...

    操作系统课设-线程安全的双向链表

    首先,我们需要理解双向链表的基本概念。双向链表是一种数据结构,每个节点包含两个指针,分别指向它的前一个节点和后一个节点。与单链表相比,双向链表允许我们在正向和反向两个方向上高效地遍历数据,但同时也增加...

    c++完整双链表操作代码

    通过以上分析可以看出,这段代码实现了双链表的基本操作,包括创建、插入、删除和获取长度等功能。双链表作为一种常用的数据结构,在许多实际应用中都有着广泛的应用场景,例如在实现双向队列、缓存管理等方面。理解...

    单链表和双链表的基本操作实例

    单链表和双链表是数据结构中的基本概念,它们在计算机科学中有着广泛的应用,尤其是在算法设计和实现中。本文将深入探讨这两种链表的数据结构特性,以及如何进行插入、删除、创建、打印和逆序等基本操作。 首先,...

    Java算法实例-双向链表操作

    除了上述基本操作,还可以实现查找特定值的节点、反转链表、合并两个有序链表等高级操作。例如,反转链表可以使用迭代或递归的方式实现。 双向链表因其特性,在很多算法问题中都有所应用,如LRU缓存淘汰策略、实现...

Global site tag (gtag.js) - Google Analytics