回 帖 发 新 帖 刷新版面

主题:[讨论]队列问题,高手帮忙看一下

#include<iostream>
using namespace std;
typedef struct node
{
    int data;
    struct node *next;
}QNode;
typedef struct
{
    QNode *front, *rear;
}LQueue,*link;
link initqueue()
{
    link L;
    L=new(LQueue);
    L->rear=L->front;
    L->front->next=NULL;
    return L;
}
void inqueue(link q)
{
    QNode *p;
    int x,n,i;
    cout<<"请输入数字个数:"<<endl;
    cin>>n;
    cout<<"输入数字:";
    for(i=0;i<n;i++)
    {
    cin>>x;
    p=new(QNode);
    p->data=x;
    p->next=NULL;
    q->rear->next=p;
    q->rear=p;
    }
}
int outqueue(link q)
{
    QNode *p;
    int e;
    if(q->front==q->rear)
        cout<<"error"<<endl;
    p=q->front->next;
    q->front->next=p->next;
    e=p->data;
    free(p);
    if(q->rear==NULL)
        q->front=q->rear;
    return e;

}
main()
{
    link h;
    h=initqueue();
    inqueue(h);

}

回复列表 (共1个回复)

沙发

只是看了下你的前两个函数,在initqueue里面的一个明显的错误是L->front->next未分配空间,所以不能赋值NULL,这儿会有错误的;
链表式的队列刚开始rear和front都是NULL,以front是否为NULL判断是否为空,因此插入的时候,如果front为NULL需要改变front的值指向第一个结点;
稍微改了下,你自己再看看还有什么要改的:
link initqueue()
{
    link L;
    L=new(LQueue);
    L->rear=L->front = NULL;
//    L->front->next=NULL;
    return L;
}
void inqueue(link q)
{
    QNode *p;
    int x,n,i;
    cout<<"请输入数字个数:"<<endl;
    cin>>n;
    cout<<"输入数字:";
    for(i=0;i<n;i++)
    {
        cin>>x;
        p=new(QNode);
        p->data=x;
        p->next=NULL;
        q->rear->next=p;
        q->rear=p;
        if(front == NULL)front = p;
    }
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册