问题遇到的现象和发生背景
双向链表不能输出
用代码块功能插入代码,请勿粘贴截图
#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;
}
运行结果及报错内容
没有输出
我的解答思路和尝试过的方法
不知道哪里出错了
我想要达到的结果
有输出