顺序队列
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define MAXLEN 10 //定义队列的最大容量
typedef int Datatype; //数据类型
typedef struct{
Datatype data[MAXLEN];
int front,rear; //定义对头与队尾指针
}SeQueue;
SeQueue InitSeQueue(){ //队列初始化操作
SeQueue q;
q.front=-1;
q.rear=-1;
return(q);
}
int Getfront(SeQueue *q, int *x) { //获取队首元素
if(q->front==q->rear)
return(0);
else{
*x=q->data[(q->front)+1];
return(1);
}
}
int EnterSeqQueue(SeQueue *q, int* x) { //入队操作
if(q->rear>=MAXLEN-1) //队列已满,插入失败
return(0);
else{
q->rear++;
q->data[q->rear]=x;
return(1);
}
}
int Empty(SeQueue *q){ //判断队空{
return(q->front==q->rear);
}
int DelSeqQueue(SeQueue *q, int *x) { //出队操作
if(q->front==q->rear) //队列为空,无元素可删除
return(0);
else{
q->front++;
*x=q->data[q->front];
return(1);}
}
void print(SeQueue q){
int n;
if(q.front!=q.rear){
printf("队列剩余元素为: ");
for(n=q.front+1;n<=q.rear;n++)
printf("%d ",q.data[n]);
}
else
printf("队列为空\n");
}
int main(){
SeQueue Myqueue;
int n,y,z,i,j;
Myqueue=InitSeQueue();
if(Empty(&Myqueue)!=0)
printf("\n队列为空!");
else
printf("\n队列非空!");
printf("\n请输入队列元素的数目: ");
scanf("%d",&n);
printf("请输入待入队的%d个元素:\n",n);
for(i=1;i<=n;i++){
scanf("%d",&y);
EnterSeqQueue(&Myqueue,y);
}
print(Myqueue);
Getfront(&Myqueue,&z);
printf("当前队列的队头元素为: %d \n",z);
print(Myqueue);
printf("\n请输入出队元素的个数:\n",n);
scanf("%d",&j);
for(i=1;i<=j;i++){
DelSeqQueue(&Myqueue,&z);
printf("%d ",z);
}
printf("\n");
print(Myqueue);
if(Empty(&Myqueue)!=0)
printf("\n队列为空!");
else
printf("\n队列非空!");
system("pause");
}
链式队列
#include<iostream>
using namespace std;
typedef int elemType;
struct QNode{
elemType data;
QNode *next;
};
struct LinkQueue{
QNode *front;
QNode *rear;
};
//初始化
void InitQueue(LinkQueue *q){
q->front = q->rear = new QNode;
q->front->next = NULL;
}
//插入元素e为队列新的队尾元素
void EnQueue(LinkQueue *q, elemType e){
QNode *p = new QNode;
p->data = e;
p->next = NULL;
q->rear->next = p;
q->rear = p;
}
//删除队首元素,并打印其值
void DeQueue(LinkQueue *q){
QNode *p = q->front->next;
if(q->front==q->rear)
cout<<"队列为空"<<endl;
else{
elemType x = p->data;
cout<<"删除队头元素: "<<x<<endl;
q->front->next = p->next;
if(q->rear == p)
q->rear = q->front;
delete p;
}
}
//遍历队列
void TraQueue(LinkQueue *q){
QNode *p = q->front->next;
int i = 1;
if(q->front==q->rear)
cout<<"队列为空"<<endl;
else{
while(p!=q->rear){
cout << i <<":\t"<<p->data<<endl;
p = p->next;
i++;
}
cout << i <<":\t"<<q->rear->data<<endl;
}
}
//清空队列
void ClearQueue(LinkQueue *q){
if(q->front==q->rear)
cout<<"出错,队列已经为空"<<endl;
else{
q->rear->next = q->front;
delete(q->front);
q->front = q->rear;
}
}
//求队列长度
int LengthQueue(LinkQueue *q){
QNode *p = q->front->next;
int length = 0;
if(q->front!=q->rear){
while(p){
length++;
p = p->next;
}
}
return length;
}
int main(){
LinkQueue q;
InitQueue(&q);
for(int i=1;i<7;i++)
EnQueue(&q,i);
int length = LengthQueue(&q);
cout <<"队列长度为: "<< length <<endl;
TraQueue(&q);
cout<<endl;
DeQueue(&q);
TraQueue(&q);
cout<<endl;
for(int i=0;i<5;i++)
DeQueue(&q);
TraQueue(&q);
cout<<endl;
return 0;
}