现在的位置: 首页 > 综合 > 正文

链队列

2013年03月23日 ⁄ 综合 ⁄ 共 1369字 ⁄ 字号 评论关闭

// 队列1.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include<iostream>
using namespace std;

typedef struct QNode{
 int data;
 struct QNode *next;
}QNode,*QueuePtr;
typedef struct{
 QueuePtr front;//队头指针,指向队头元素的前一个位置
 QueuePtr rear;//队尾指针
}LinkQueue;

int InitQueue(LinkQueue *Q)
{
 //构造一个空队列
 (*Q).front=(*Q).rear=(QueuePtr)malloc(sizeof(QNode));
 if(!(*Q).front)
  exit(-1);
 (*Q).front->next=NULL;
 return true;
}

int GetHead_Q(LinkQueue Q,int *e)
{
 //若队列不为空,则用e返回Q的队头元素,并返回OK,否则返回ERROR;
 QueuePtr p;
 if(Q.front==Q.rear)
  return false;
 p=Q.front->next;
 *e=p->data;
 return true;
}

int EnQueue(LinkQueue *Q,int e)
{
 //插入元素e为Q的新的队尾元素
 QueuePtr p=(QueuePtr)malloc(sizeof(QNode));
 if(!p)//存储分配失败
  exit(-1);
 p->data=e;
 p->next=NULL;
 (*Q).rear->next=p;
 (*Q).rear=p;
 return true;
}
int DeQueue(LinkQueue *Q,int *e)
{
 //若队列不空,删除Q的队头元素,用e返回其值,并返回OK,否则返回ERROR
 QueuePtr p;
 if((*Q).front==(*Q).rear)
  return false;
 p=(*Q).front->next;
 *e=p->data;
 (*Q).front->next=p->next;
 if((*Q).rear==p)
  (*Q).rear=(*Q).front;
 free(p);
 return true;
}

int main(int argc, char* argv[])
{
 int num,ch[200];
 int head,head1,head2;
 LinkQueue Lin;
 InitQueue(&Lin);
 cout<<"请输入元素的个数"<<endl;
 cin>>num;
 cout<<"输入各个元素"<<endl;
 for(int i=1;i<=num;i++)
 {
  cin>>ch[i];
  EnQueue(&Lin,ch[i]);
 }
 GetHead_Q(Lin,&head);
 cout<<"队头元素是 "<<head<<endl;
 DeQueue(&Lin,&head1);
 cout<<"删除掉的队头元素是 "<<head1<<endl;
 GetHead_Q(Lin,&head2);
 cout<<"新的队头元素是 "<<head2<<endl;
return 0;
}
 

抱歉!评论已关闭.