diaoxue 发表于 2008-3-11 00:42

数据结构-队列实现的问题

感觉结构混乱的很,没有算法那么清晰,帮忙看看。多谢!!
//#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
//using namespace std;

typedef int QElemType;

typedef struct QNode{
    QElemType data;
    struct QNode *next;
}Queue,*QueuePtr;

typedef struct
{
        QueuePtr front;
        QueuePtr rear;
}LinkQueue;
//===========初始化队列
void InitQueue(LinkQueue &Q)
{
   Q.front=Q.rear = (QueuePtr)malloc(sizeof(QNode));
   if(!Q.front)//////
           exit(1);
   Q.front.next=NULL;
}
//==============入队列
void EnQueue(LinkQueue &Q,QElemType e)
{
    p=(QueuePtr ) malloc (sizeof(QNode));//==========error
    if(!p)
        {
                //cout<<"内存不足!\n";   
                exit(1);
        }
    p.data=e;
    p.next=NULL;
        Q.rear.next=p;
        Q.rear=p;   
}
//==============出队列
void DeQueue(LinkQueue &Q,QElemType &e)
{
        if(Q.front==Q.rear)
                exit(1);
        p=Q.front.next;
        e=p.data;
        Q.front.next=p.next;
        if(Q.rear==p)
                Q.rear=Q.front;
        free(p);
}
//===============销毁队列
void DestroyQueue(LinkQueue &Q)
{
        while(Q.front)
        {
                Q.rear=Q.front.next;
                free(Q.front);
                Q.front=Q.rear;
        }
}

int main()
{
//
}

pointer 发表于 2008-3-15 19:54

路过

你这是C++设计的,有没有C语言版的啊!

diaoxue 发表于 2008-3-16 22:49

回复 2# 的帖子

几乎都是c的语法啊.
我感觉入队列的函数中有问题.

diaoxue 发表于 2008-3-23 13:17

改了下,还是有问题
问题出在DeQueue函数。
//#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
//using namespace std;

typedef int QElemType;

typedef struct QNode{
    QElemType data;
    struct QNode *next;
}Queue,*QueuePtr;

typedef struct
{
    QueuePtr front;
    QueuePtr rear;
}LinkQueue;
//==================初始化队列=======================
void InitQueue(LinkQueue &Q)
{
   Q.front=Q.rear = (QueuePtr)malloc(sizeof(QNode));
   if(!Q.front)//////
       exit(1);
   Q.front->next=NULL;
}
//===================入队列=========================
void EnQueue(LinkQueue &Q,QElemType e)
{
        QNode *p;
    p=(QueuePtr) malloc (sizeof(QNode));//==========error
    if(!p)
    {
        //cout<<"内存不足!\n";   
        exit(1);
    }
    p->data=e;
    p->next=NULL;
    Q.rear->next=p;
    Q.rear=p;   
}
//====================出队列========================
void DeQueue(LinkQueue &Q,QElemType &e)
{
        //printf("Invoke DeQueue.");
    if(Q.front->next==Q.rear)//
        exit(1);
        QNode *p;
    p=(QueuePtr) malloc (sizeof(QNode));//==========error
    p=Q.front->next;
    e=p->data;
    Q.front->next=p->next;
    if(Q.rear==p)
        Q.rear=Q.front;
    free(p);
//        printf("Invoke success.");not execute.
}
//===================销毁队列========================
void DestroyQueue(LinkQueue &Q)
{
    while(Q.front)
    {
        Q.rear=Q.front->next;
        free(Q.front);
        Q.front=Q.rear;
    }
}
//===================打印队列=========================
void DisplayQueue(LinkQueue &Q)
{
        QueuePtr p=Q.front->next;
//        while(Q.front->next)
        while(p)
        {
        //        printf("%d",Q.front->next->data);
                printf(" %d ",p->data);
                Q.front=Q.front->next;
                p=Q.front->next;
        //        p=p->next;
        }
}
int main()
{
        const int n=5;
        int a[n],
                i,
                e;
        LinkQueue Q;
        InitQueue(Q);
        for(i=0;i<n && scanf("%d",&a[i]);i++);
        for(i=0;i<n;i++)
        {
                EnQueue(Q,a[i]);
        }
        DisplayQueue(Q);
        printf("\n===================\n");
        for(i=0;i<n;i++)
        {
                DeQueue(Q,e);
                printf("\n 出队列的元素为:\n ");
                printf("%d \n",e);
        }
        return 0;
}

页: [1]

编程论坛