首页 > 编程语言 >双链表的定义、初始化、插入、删除,C++代码实现的算法

双链表的定义、初始化、插入、删除,C++代码实现的算法

时间:2023-08-27 11:34:40浏览次数:49  
标签:count 初始化 duLinklist int C++ next prior 双链 duNode


#include <iostream>

using namespace std;

/*双向链表类型定义*/
typedef struct duNode
{
    char data;
    struct duNode *prior;
    struct duNode *next;
}duNode;

typedef duNode *duLinklist;//指针类型,故访问它的成员用“->”。

/*初始化双向链表*/
void initLinklist_Du(duLinklist &L)//此处叫做引用调用,即实参和形参共用一个地址。
{
    L=new duNode;
    L->next=L;
    L->prior=L;
}


/*取某个结点的位置*/
duNode *getElemP_D(duLinklist L,int i)
{
    duNode *p;
    int count;

    p=L->next;
    count=1;

    while(p!=L&&count<i-1)
    {
        p=p->next;
        count++;
    }

    if(p==L||count>i-1)
        return NULL;
    else
        return p->next;
}


/*求双向链表的长度*/
int lengthLinklist_Du(duLinklist &L)
{

    duNode *p;
    int count;

    p=L->next;
    count=0;

    while(p!=L)
    {
        p=p->next;
        count++;
    }

    return count;
}


/*插入*/
void insertList_Du(duLinklist &L,int i,char x)
{
    duNode *p;
    duNode *s;
    p=getElemP_D(L,i);
    if(p==NULL)
        cout<<"Poision Error!";

    s=new duNode;
    s->data=x;
    s->prior=p->prior;
    s->next=p;
    p->prior->next=s;
    p->prior=s;
}

/*删除*/
void deleteList_Du(duLinklist &L,int i)
{
    duNode *p;
    p=getElemP_D(L,i);
    if(p==NULL)
        cout<<"Poision Error!";
    p->next->prior=p->prior;
    p->prior->next=p->next;
    delete p;
}


/*创建一个双向链表*/
void creatLinklist_Du(duLinklist &L,int n)
{
    duNode *p;
    duNode *s;
    initLinklist_Du(L);
    p=L;

    int i;
    for(i=0;i<n;i++)
    {
        s=new duNode;//这里忘记给S分配空间了,所以出错了。
        cin>>s->data;
        s->next=L;
        s->prior=p;
        p->next=s;
        L->prior=s;
        p=s;
    }
}


/*输出双向链表中的元素*/
void outputLinklist_Du(duLinklist &L)
{
    duNode *p;
    p=L->next;

    int i;
    for(i=0;i<lengthLinklist_Du(L);i++)
    {
        cout<<p->data<<" ";
        p=p->next;
    }
    cout<<endl;
}


void main()
{
    duLinklist L;
    creatLinklist_Du(L,3);
    //outputLinklist_Du(L);
}

出错了,要先自己仔细看看,自己找一下毛病,因为没有人比自己更熟悉自己的代码了!实在看不出哪错了,再去向别人请教!嘿嘿,努力啊!

标签:count,初始化,duLinklist,int,C++,next,prior,双链,duNode
From: https://blog.51cto.com/u_5173797/7252045

相关文章

  • 顺序表的定义、初始化、及插入、删除、查询操作,将算法转化成具体的代码
    #include<iostream>usingnamespacestd;#defineLIST_INIT_SIZE100#defineLISTINCREMENT10intOK=1;intOVERFLOW=0;intERROR=0;/*线性表的定义*/typedefstruct{char*elem;intlength;//当前长度intlistsize;//线性表的长度}S......
  • 链队列的实现,C++代码实现
    /*链队列的实现*/#include<iostream>usingnamespacestd;/*链队列类型定义*/typedefstructQNode{structQNode*next;chardata;}QNode,*queuePtr;//结点的定义typedefstructlinkQueue{queuePtrrear;queuePtrfront;}linkQueue;//队列的定......
  • 基于QT和C++实现的停车场管理系统
    基于QT和C++实现的停车场管理系统停车场管理系统简介一、 问题描述设停车场是一个可停放若干辆辆汽车的狭多层平面区域,且只有一个大门可供汽车进出。若车场内已停满汽车,则后来的汽车只能在门外的狭长便道上等候,一旦停车场内有车开走,则排在便道上的第一辆车即可进入。每辆停放在......
  • 力扣-2. 两数相加(C++题解)
    题目链接:https://leetcode.cn/problems/add-two-numbers/description/给你两个 非空的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字0之......
  • C++11 右值引用&&、移动语义std::move、完美转发std::forward
    参考:https://blog.csdn.net/HR_Reborn/article/details/130363997 #pragmaonceclassArray{public:Array():size_(0),data_(nullptr){}Array(intsize):size_(size){data_=newint[size_];}//复制构造函数(深拷贝构造)A......
  • C++的三大特性 ,封装、继承、多态?(一)
    C++的三大特性:封装、继承、多态。一、封装:将属性和行为作为一个整体,表现生活中的事物。一般来说就是把变量和函数一起放在一个类里,此时变量叫做成员变量,函数叫做成员函数。封装的意义一:将属性和行为作为一个整体,表现生活中的事物。1#include<iostream>2usingnamespaces......
  • 力扣-228. 汇总区间(C++题解)
    题目链接:https://leetcode.cn/problems/summary-ranges/description/给定一个 无重复元素的 有序整数数组\(nums\)。返回恰好覆盖数组中所有数字的最小有序区间范围列表 。也就是说,\(nums\)的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于\(......
  • [转]C++使用虚函数的时候,子类也要使用virtual关键字吗
    原文地址:https://blog.csdn.net/gao1440156051/article/details/45670715父类使用虚函数是为了让子类重写,那子类重写的时候也需要带virtual关键字吗?比如:classBase{virtualboolinit();};classDerived{virtualboolinit();//这里的vitual是必须的吗?好像不用也能编译通过呃…......
  • 类定义、属性、初始化和析构知识点总结
    一:前言:为什么要学类?   类是一个独立存放变量(属性/方法)的空   1.简化代码,提升效率,避免代码重复写入。如用户注册、校验、登录方法可以放在一个类中,需要哪个方法就调用哪个类===》建立模型框架(建立一个方法)===》很多鼠标(实例化)===》都是独立的2.面向对象:直接给我......
  • 【算法-二分查找】实现过程、C++代码示例以及实际应用
    二分查找简介:也称为折半查找,是一个在已排序数组中查找特定元素的搜索算法。它的工作原理是将有序数组分成两半,然后检查目标值是在左半部分还是右半部分,然后在所选择的那部分中继续查找。这一过程将不断地重复,直到找到目标值或确定目标值不在数组中。实现过程:1.初始化两个指针:lo......