在队列与无表头单链表问题中-创建两个客户信息,但是删除一个后,全再也无法显示全部用户信息。


#include<iostream>
#include<iomanip>
#pragma warning(disable:4996)
using namespace std;
struct user
{
    user* next;
    user* front;
    user* rear;
    char endname[20];
    char linenumber[20];
    char planenumber[20];
    char weekday[20];
    double price;
    int    lease;
    char username[20];
    int  uservote;
    char leave[20];
    char candidate[20];
};
user* creatnode(user*& head, int n)
{
    head = 0;

    user* p,*q=head;
    cout << "------------------------------------------------------------------------------" << endl;
    cout << "|"; cout << setw(15) << "请输入" << n << "位客户的航班信息--------------------" << endl;;
    cout << "|"; cout << "                                                                 " << endl;
    cout << "------------------------------------------------------------------------------" << endl;
    cout << endl;
    for (int i = 1; i <= n; i++)
    {
        cout << setw(16) << " 输入第" << i << "位客户航班信息---------------------" << endl;
        cout << endl;
         p = new user;
         cout << setw(15) << "输入终点站号-----" << endl;
         cin >> p->endname; //航班号、飞机号、飞行周日(星期几)、乘员定额、余票量、
            // 已定票的客户名单(包括姓名、定票量、舱位等级1,2或3)以及等候替补的客户名单。
         cout << setw(15) << "输入飞机号-----" << endl;
         cin >> p->planenumber;
         cout << setw(15) << "输入飞行周日-----" << endl;
         cin >> p->weekday;
         cout << setw(15) << "输入乘员定额-----" << endl;
         cin >> p->price;
         cout << setw(15) << "输入余票量-----" << endl;
         cin >> p->lease;
         cout << setw(15) << "输入已订票的客户姓名----" << endl;
         cin >> p->username;
         cout << setw(15) << "输入订票量-----" << endl;
         cin >> p->uservote;
         cout << setw(15) << "输入舱位等级-----" << endl;
         cin >> p->candidate;
         cout << setw(15) << "输入等待替补的客户名单-----" << endl;
         cin >> p->leave;

         if (head == 0)
         {
             head= p;
             head->front = p;
         }
         else
         {
             q->next = p;
         }
         q = p;
         head->rear = p;
         p->next = 0;
    }
    cout <<setw(15)<< "操作完成!!!" << endl;
    cout << endl;
    return head;
}
void InitQueue(user* Q)
{
    Q->front = Q->rear = NULL;
}
int queueEmpty(user* q)
{
    return (q->front == NULL && q->rear == NULL);
    
}
void EnQueue(user*&q)
{
    
    user* p;
    p = new user;
    cout << endl;
    cout << setw(15) << "给预定的客户录入航班信息----------------" << endl;
    cout << setw(15) << "输入终点站号-----" << endl;
    cin >> p->endname; 
    cout << setw(15) << "输入飞机号-----" << endl;
    cin >> p->planenumber;
    cout << setw(15) << "输入飞行周日-----" << endl;
    cin >> p->weekday;
    cout << setw(15) << "输入乘员定额-----" << endl;
    cin >> p->price;
    cout << setw(15) << "输入余票量-----" << endl;
    cin >> p->lease;
    cout << setw(15) << "输入已订票的客户姓名----" << endl;
    cin >> p->username;
    cout << setw(15) << "输入订票量-----" << endl;
    cin >> p->uservote;
    cout << setw(15) << "输入舱位等级-----" << endl;
    cin >> p->candidate;
    cout << setw(15) << "输入其他等待替补的客户名单-----" << endl;
    cin >> p->leave;
    if (queueEmpty(q))
    {
        q->front = q->rear = p;
    }
    else
    {
        q->rear->next = p;
        q->rear = p;
        q->rear->next = 0;
    }
    cout <<setw(15)<< "操作完成!!!" << endl;
    cout << endl;
}
void Dequeue1(user*& q)
{
    cout << endl;
    cout << setw(15) << "办理退票处理------" << endl;
    user* p;
    p = q->front;
    q->front = p->next;
    if (q->rear == p)
    {
        q->rear = NULL;
    }
    cout << setw(15) << "显示客户登机信息,将其从安排中删除-----" << endl;
    cout << endl;
    cout << setw(15) << "已登机的客户姓名----" << p->username << endl;
    cout << setw(15) << "订票量-----" << p->uservote << endl;
    cout << setw(15) << "舱位等级-----" << p->candidate << endl;
    delete p;
    cout << setw(15) << "操作完成!!!" << endl;
    cout << endl;

}
void print(user*&q)
{
        user* m = q->front;
        cout << endl;
        cout << setw(15) << "打印航班信息如下-----------------------------------" << endl;
        while (m != 0)
        {
            cout << endl;
            cout << setw(15) << "终点站号-----" << m->endname << endl;
            cout << setw(15) << "飞机号-----" << m->planenumber << endl;
            cout << setw(15) << "飞行周日-----" << m->weekday << endl;
            cout << setw(15) << "乘员定额-----" << m->price << endl;
            cout << setw(15) << "余票量-----" << m->lease << endl;
            cout << setw(15) << "已订票的客户姓名----" << m->username << endl;
            cout << setw(15) << "订票量-----" << m->uservote << endl;
            cout << setw(15) << "舱位等级-----" << m->candidate << endl;
            cout << endl;
            m = m->next;
        }
        cout << setw(15) << "操作完成!!!" << endl;
        cout << endl;
}
void print1(user*& q)
{
        cout << endl;
        user* p = q->front,*k=q->front;
        cout << setw(15) << "输入要查询的客户姓名------" << endl;
        char name[20];
        cin >> name;
        while (k!= 0)
        {
            if (strcmp(name, k->username) == 0)
            {
                cout << endl;
                cout << "查找成功!!!具体信息显示如下" << endl;
                cout << setw(15) << "终点站号-----" << k->endname << endl;
                cout << setw(15) << "飞机号-----" << k->planenumber << endl;
                cout << setw(15) << "飞行周日-----" << k->weekday << endl;
                cout << setw(15) << "乘员定额-----" << k->price << endl;
                cout << setw(15) << "余票量-----" << k->lease << endl;
                cout << setw(15) << "已订票的客户姓名----" << k->username << endl;
                cout << setw(15) << "订票量-----" << k->uservote << endl;
                cout << setw(15) << "舱位等级-----" << k->candidate << endl;
                cout << endl;
                break;
            }
            k = k->next;
        }
        cout << setw(15) << "操作完成!!!" << endl;
    
    cout << endl;
}
int main()
{
    user* head;
    int n,m;
    cout << setw(15) << "办理业务------------------" << endl;
    cout << setw(15) << "输入1.查询个人航线--------" << endl;
    cout << setw(15) << "输入2.客票预定------------" << endl;
    cout << setw(15) << "输入3.办理退票------------" << endl;
    cout << setw(15) << "输入4.查询所有航班信息----" << endl;
    cout << setw(15) << "输入5.退出处理------------" << endl;
    cout << endl;
    cout << setw(15) << "先对已订票的客户信息进行录入" << endl;
    cout << setw(15) << "输入人数------------------" << endl;
    cin >> m;
    creatnode(head, m);
    cout << setw(15) << "请输入数字----------------" << endl;
    while (cin >> n)
    {
        if (n == 1)
        {
            print1(head);
        }
        else if (n == 2)
        {
            EnQueue(head);
        }
        else if (n == 3)
        {
            Dequeue1(head);
        }
        else if (n == 4)
        {
            print(head);
        }
        else
            break;
        
    }
    return 0;
}
假设创建两个客户航班,1与2,然后通过队列删掉1,接着通过print()显示全部信息时,则无法显示。