回 帖 发 新 帖 刷新版面

主题:链队列问题

大家看看错在哪拉 具体原因是什么啊 
#include<iostream.h>
typedef struct node
{
    char data;
    struct node *next;
}QNnode;
typedef struct
{
    QNnode *front,*rear;
}LQueue;
int Init_LQueue(LQueue *q)
{
    if(((q->front)=new(QNnode))==NULL)
        return 0;
    q->rear=q->front;
    q->front->next=NULL;
    return 1;
}
int In_LQueue(LQueue *q,char x)
{
    QNnode *p;
    if((p=new(QNnode))==NULL) return 0;
    p->data=x;p->next=NULL;
    q->rear->next=p;
    q->rear=p;
    return 1;
}
int Empty_LQueue(LQueue *q)
{
    if(q->front==q->rear)return 0;
    else return 1;
}
int Out_LQueue(LQueue *q,char *x)
{
    QNnode *p;
    if(Empty_LQueue(q))
    {
        cout<<"it is empty"<<endl;
        return 0;
    }
    else
    {
        p=q->front->next;
        q->front->next=p->next;
        *x=p->data;
        delete p;
        if(q->front->next==NULL)
            q->rear=q->front;
        return 1;
    }
}
void print(LQueue *q)
{
    QNnode *p;
    p=q->front->next;
    while(p!=q->rear)
    {   
        cout<<p->data;
        p=p->next;
    }
}
void main()
{
    LQueue *q;
    char x;
    Init_LQueue(q);
    for(int i=0;i<10;i++)
    {
        cin>>x;
        In_LQueue(q,x);
    }
    print(q);
}

回复列表 (共5个回复)

沙发


LQueue *q;//未初始化
 
 Init_LQueue(q)里面: if(((q->front)=new(QNnode))==NULL)
的q->front指向啥?q都不知道是啥,q->front就更不用说了

板凳

应该是指针的问题。

3 楼

1楼误解!

4 楼

可能没有一个函数是对的,我就看了前面两个函数。
比如初始化函数应该如下:
void Init_LQueue(LQueue *q)
{
    q->rear=NULL;
    q->front=NULL;
}

5 楼

#include "stdio.h"
#include "stdlib.h"
typedef char datatype;
typedef struct qnode
{   datatype data;
    struct qnode *next;
}linklist;

typedef struct
{   linklist *front;
    linklist *rear;
}linkqueue;
linkqueue *q;

int empty()                                        /*判队空*/
{
    if(q->front==q->rear)
        return(1);
    else return(0);
}

datatype dequeue()                                  /*出队*/
{
    linklist *s;
    if(q->rear==NULL)
    {
        printf("队空"); return NULL;
    }
    else if(q->front==q->rear)
    {   s=q->front;
        q->front=q->rear=NULL;
        return(s->data);
        free(s);
    }
    else
    {
        s=q->front;
        q->front=q->front->next;
        return(s->data);
        free(s);
    }
}

enqueue(datatype x)                                 /*入队*/
{
    linklist *s;
    s=malloc(sizeof(linklist));
    s->data=x;
    s->next=NULL;
    if(q->rear==NULL)
        q->front=q->rear=s;
    else
    {   q->rear->next=s;
        q->rear=s;
    }
}

datatype front()                               /*取队头结点数据*/
{
    if(q->rear==NULL)
    {   printf("队空");  return NULL;}
    else   return (q->front->data);
}

setnull()                                         /*置空队*/
{
    q->front=malloc(sizeof(linklist));
    q->front->next=NULL;
    q->rear=q->front;
}

linkqueue *creat()                              /*建立新链队*/
{
    q=malloc(sizeof(linkqueue));
    q->front->next=q->rear->next=NULL;
}

int queuelength()                                 /*求队长*/
{
    int n=0;
    linklist *p=q->front;
    while(p!=NULL)
    {   n++;
        p=p->next;
    }
    return(n);
}

print()                                        /*输出队中数据*/
{
    linklist *a;
    a=q->front;
    if(q->rear==NULL)
    {   printf("空队\n"); return NULL;}
    else
    {   do
        {   printf("%c",a->data);
            a=a->next;
        }while(a);
        printf("\n");
    }
}
    

main()
{
    int a,b;datatype x,y;
    do
    {   printf("\n**********主菜单**********\n");
        printf("1.建立新链队\n");
        printf("2.入队\n");
        printf("3.出队\n");
        printf("4.取队头\n");
        printf("5.判队空\n");
        printf("6.置空队\n");
        printf("7.求队长\n");
        printf("8.输出链队中数据\n");
        printf("0.退出\n");
        printf("请选择:");
        scanf("%d",&a);getchar();
        switch(a)
        {   case 1:q=creat();break;
            case 2:do
                   {    printf("输入要入队的数据:");
                        scanf("%c",&x);getchar();
                        enqueue(x);
                        printf("是否继续?");
                        scanf("%c",&y);getchar();
                   }while(y=='y');break;
            case 3:printf("%c\n",x=dequeue());break;
            case 4:printf("%c\n",x=front());break;
            case 5:b=empty();printf("%d\n",b);break;
            case 6:setnull();break;
            case 7:b=queuelength();printf("%d\n",b);break;
            case 8:print();break;
            case 0:exit(0);break;
        }
    }while(1);
}

我来回复

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