数据结构教程(第四版)P85~87//队列的链式存储结构

这个代码一开始出了点问题,在进队列时没有将next指针置为NULL导致后面数据出错,不过好在,我问了一个朋友,才发现这个问题。

在此我要对我这位朋友表示感谢!3Q温小姐

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<iostream.h>
typedef int ELemType; 
typedef struct Node
{
  ELemType data;
  struct Node *next;
}QNode;
typedef struct
{
  QNode *front;
  QNode *rear;
}LiQueue;
void InitQueue(LiQueue *&p)
{
  p=(LiQueue *)malloc(sizeof(LiQueue));
  p->front=p->rear=NULL;
  
}
void DestroyQueue(LiQueue *&q)
{
  QNode *r,*p=q->front;
  if(p!=NULL)
  {
    r=p->next;
    while(r!=NULL)
    {
      free(p);
      p=r;
      r=p->next;
    }
    
} 
    free(p);//删除头节点
    free(q);//删除链队头结点
  
}
bool QueEmpty(LiQueue *q)
{
  return (q->rear==NULL);
}
void EnQueue(LiQueue *&q,ELemType e)
{
  QNode *r;
  r=(QNode *)malloc(sizeof(QNode));
  r->data=e;
  r->next=NULL;
  if(q->rear==NULL)
  {
    q->front=q->rear=r;
  }
  else
  {
    q->rear->next=r;
    q->rear=r;
  }
}
bool DeQueue(LiQueue *&p,ELemType &e)
{
  QNode *r;
  if(p->rear!=NULL)
  {
    r=p->front;
    e=r->data;
    if(p->rear==p->front)
    p->rear=p->front=NULL;
    else
    {
      
      p->front=p->front->next;
      
    }
    free(r);
    return true;
    
  }
  return false;
}
void DisQueue(LiQueue *q)
{
  if(q->rear!=NULL)
  {
 QNode *p=q->front,*r;
  while(p!=NULL)
  {
    cout<<p->data<<" ";
    p=p->next;
    
  }
  }
}
int main()
{
  int a;
  LiQueue *q;
  InitQueue(q); 
  if(QueEmpty(q))
	 cout<<"队列为空"<<endl;
 EnQueue(q,1);
  EnQueue(q,2);
  EnQueue(q,3);
  EnQueue(q,4);
  DisQueue(q);
  DeQueue(q,a);
  cout<<a<<endl;
  DisQueue(q);
 DestroyQueue(q);

  
  return 0;
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值