数据结构-队列实现的问题
感觉结构混乱的很,没有算法那么清晰,帮忙看看。多谢!!//#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()
{
//
}
路过
你这是C++设计的,有没有C语言版的啊!回复 2# 的帖子
几乎都是c的语法啊.我感觉入队列的函数中有问题. 改了下,还是有问题
问题出在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]
