#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
C语言,实现双向链表以及其基本操作,基本操作:链表初始化、创建、查询、删除、释放,查询和删除均有两种方式,一种是按照值,另一种是按照结点的序号。
输入多个字符,用顺序表保存,实现对表的操作,实现初始化,求表长度,求表中的第i个结点,输入一个字符,查找对应的结点,插入一个结点,删除一个结点,排序
本教程将深入探讨双向链表的基本操作,基于提供的"Base_operater_of_double_List"文件,我们可以期待学习到以下关键知识点: 1. 双向链表的结构:每个节点在双向链表中包含两个指针,一个指向下一个节点(后继),...
下面我们将详细探讨如何用C语言实现双向链表的基本操作,以及如何结合插入排序法实现基于双向链表的升序排序。 首先,双向链表的结构定义是关键。我们需要创建一个结构体来存储数据和两个指针,分别指向前后节点: ...
双循环链表的初始化 创建 插入 删除 源代码
在本次课程设计中,我们主要实现了线性表(双链表)的基本操作,包括创建双链表、查找双链表中的元素、插入双链表中的元素、删除双链表中的元素等工作。 双链表是一种特殊的线性表,它具有双向链接的特点,克服了...
本程序是一个关于双向链表的操作,包括插入节点,删除节点,遍历等
在提供的压缩包文件中,"双链表"很可能是包含了C++源代码的文件,用于演示双链表的实现和基本操作。源代码可能会包括节点结构体的定义、链表类的实现以及示例操作的主函数。通过阅读和理解这段代码,你可以更好地...
以下是对链表基本操作的详细讲解: 1. **链表的定义** 链表由一系列节点组成,每个节点包含数据和指向下一个节点的指针。对于双向链表,每个节点还包含一个指向前一个节点的指针。在C语言中,链表节点(或称为结点...
链表可以分为单链表、双链表和循环链表三种,下面我们将详细介绍这些链表的操作。 单链表 单链表是一种基本的链表结构,其中每个节点只有一个指针指向下一个节点。单链表的实现可以通过结构体来实现,如上面的代码...
本文将深入探讨双向链表的概念,实现,以及如何进行基本操作。 双向链表,顾名思义,是一种链式存储结构,其中每个节点包含两个指针,一个指向前一个节点,另一个指向后一个节点。与单向链表相比,双向链表允许双向...
以上就是关于双向链表的基本操作,包括建立、插入、删除以及判断对称性的详细说明。在实际应用中,双向链表常用于实现高效的迭代器、缓存系统、数据结构如LRU等,因为它提供了向前和向后的遍历能力。通过熟练掌握...
简单的双链表基本操作,插入、删除,但不会的时候可以参考一下,是C++描述程序
编写使用freelist 的带头、尾结点的双向链表类的定义,实现双向链表的基本操作。 2. 利用双向链表实现2个一元多项式的加法和乘法运算,运算结果得到的链表要求按照指数降序排列的多项式。 3. 最后提交完整的...
首先,我们需要理解双向链表的基本概念。双向链表是一种数据结构,每个节点包含两个指针,分别指向它的前一个节点和后一个节点。与单链表相比,双向链表允许我们在正向和反向两个方向上高效地遍历数据,但同时也增加...
通过以上分析可以看出,这段代码实现了双链表的基本操作,包括创建、插入、删除和获取长度等功能。双链表作为一种常用的数据结构,在许多实际应用中都有着广泛的应用场景,例如在实现双向队列、缓存管理等方面。理解...
单链表和双链表是数据结构中的基本概念,它们在计算机科学中有着广泛的应用,尤其是在算法设计和实现中。本文将深入探讨这两种链表的数据结构特性,以及如何进行插入、删除、创建、打印和逆序等基本操作。 首先,...
除了上述基本操作,还可以实现查找特定值的节点、反转链表、合并两个有序链表等高级操作。例如,反转链表可以使用迭代或递归的方式实现。 双向链表因其特性,在很多算法问题中都有所应用,如LRU缓存淘汰策略、实现...