长明351 2022-10-05 01:20 采纳率: 0%
浏览 35

双向链表的尾插法创建不能输出

问题遇到的现象和发生背景

双向链表不能输出

用代码块功能插入代码,请勿粘贴截图
#include<iostream>
#include<string>
#include<fstream>
#include<iomanip>
using namespace std;

#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status; //Status 是函数返回值类型,其值是函数结果状态代码。
typedef int ElemType; //ElemType 为可定义的数据类型,此设为int类型

struct Point {
    int x;//ISBN
    int y;//书名
};
typedef struct DuLNode {
    Point data; //数据域
    struct DuLNode *prior; //直接前驱
    struct DuLNode *next; //直接后继
} DuLNode, *DuLinkList;


Status InitDuList_L(DuLinkList &L) {
    L = new DuLNode;
    L->prior = NULL;
    L->next = NULL;
}

DuLNode *GetElem_DuL(DuLinkList L, int i) 
{
    DuLinkList p = L->next;
    int j = 1;
    while(p && j<i)
    {
        p = p->next;
        j++;
    }
    
    return p;

} //GetElemP_DuL

Status ListInsert_DuL(DuLinkList &L, int i, Point e) { //算法2.13 双向链表的插入
    //在带头结点的双向链表L中第i个位置之前插入元素e,i的合法值为1<=i<=表长+1
    DuLinkList p, s;
    p = new DuLNode;
    p = GetElem_DuL(L, i);
    if(!(p=GetElem_DuL(L,i)))
        return ERROR;
    
    s = new DuLNode;
    s->data = e;
    s->prior = p->prior;
    p->prior->next = s;
    s->next = p;
    p->prior = s;

} //ListInsert_DuL

Status ListDelete_DuL(DuLinkList &L, int i) { //算法2.14 双向链表的删除
    //删除带头结点的双向链表L中第i个位置之前插入元素e,i的合法值为1<=i<=表长
    DuLinkList p;
    p = new DuLNode;
    p = GetElem_DuL(L, i);
    if(!(p=GetElem_DuL(L,i)))
        return ERROR;
    
    p->prior->next = p->next;
    p->next->prior = p->prior;
    
    delete p;
    return OK; 

}//ListDelete_DuL

void CreateDuList_L(DuLinkList &L, int m) 
{
    //正位序输入n个元素的值,建立带表头结点的双向链表L,同时建立前驱指针

//    p = L;
    int i;
    DuLinkList s;
    Point e;
    for(i=0; i<m; ++i)
    {
        s = new DuLNode;
        
        cin >> e.x >> e.y; 
        s->data = e;
        s->prior = L;
        s->next = L->next;
        L->next = s;
        L = s;//时刻保持尾指针指向尾结点 
        
    }
} //CreateDuList_L
 

int main() 
{
    int a, choose;
    char op;
    Point e;
    DuLinkList L, p;
    
    cin >> choose;
    
    while (choose --) 
    {
        cin >> op;
        switch (op) 
        {
            case 'I': //建立一个双向链表
                if (InitDuList_L(L))
                break;
            case 'C': //使用后插法创建双向链表
                int n;
                cin >> n;
                CreateDuList_L(L, n);
                break;
            case 'S': //双向链表的插入
                cin >> a;
                cin >> e.x >> e.y;
                ListInsert_DuL(L, a, e);
                break;
            case 'D': //双向链表的删除
                cin >> a;
                ListDelete_DuL(L, a);
                break;
        }
    }
     //双向链表的输出
    p = L->next;
    while (p) 
    {
        cout << p->data.x << ' ' <<  p->data.y << endl;
        p = p->next;
    }
    
    return 0;
}

运行结果及报错内容

没有输出

我的解答思路和尝试过的方法

不知道哪里出错了

我想要达到的结果

有输出

  • 写回答

1条回答 默认 最新

  • X-道至简 2022-10-05 09:32
    关注

    把你测试输入的数据发下,我本地调试看看

    评论

报告相同问题?

问题事件

  • 创建了问题 10月5日

悬赏问题

  • ¥30 计算机硬件实验报告寻代
  • ¥15 51单片机写代码,要求是图片上的要求,请大家积极参与,设计一个时钟,时间从12:00开始计时,液晶屏第一行显示time,第二行显示时间
  • ¥15 用C语言判断命题逻辑关系
  • ¥15 原子操作+O3编译,程序挂住
  • ¥15 使用STM32F103C6微控制器设计两个从0到F计数的一位数计数器(数字),同时,有一个控制按钮,可以选择哪个计数器工作:需要两个七段显示器和一个按钮。
  • ¥15 在yolo1到yolo11网络模型中,具体有哪些模型可以用作图像分类?
  • ¥15 AD9910输出波形向上偏移,波谷不为0V
  • ¥15 淘宝自动下单XPath自动点击插件无法点击特定<span>元素,如何解决?
  • ¥15 曙光1620-g30服务器安装硬盘后 看不到硬盘
  • ¥15 抖音直播广场scheme