顺序队列
main.cpp
#include <iostream>
#include<malloc.h>
#define MAXNUM 100
#define elemtype int
#define true 1
#define false 0
#include"queue.h"
int main() {
sqqueue head;
int x,y,z,select;
// head=(sqqueue *)malloc (sizeof(sqqueue));
do
{
printf("\n第一次使用必须初始化!\n\n");
printf(" 请选择操作(1--7):\n");
printf("=======================\n");
printf("\n 1 初始化 \n");
printf("\n 2 建立顺序队列 \n");
printf("\n 3 入队 \n");
printf("\n 4 出队 \n");
printf("\n 5 判断队列是否为空 \n");
printf("\n 6 取队头元素 \n");
printf("\n 7 遍历队列 \n");
printf("\n======================\n");
scanf("%d",&select);
switch(select)
{
case 1:
{
initqueue(head);
printf("已经初始化顺序队列!\n");
break;
}
case 2:
{
setsqqueue(head);
printf("\n已经建立队列!\n");
display(head);
break;
}
case 3:
{
printf("请输入入队的值:\n");
scanf("%d",&x);
append(head,x);
display(head);
break;
}
case 4:
{
z=Delete(head);
printf("\n队头元素 %d 已经出队!\n",z);
display(head);
break;
}
case 5:
{
if(empty(head))
printf("队列空\n");
else
printf("队列非空");
break;
}
case 6:
{
gethead(head);
// printf("队头元素为:%d \n",y);
break;
}
case 7:
{
display(head);
break;
}
}
}while(select<=7);
return 0;
}
queue.h
#include<stdio.h>
#include<iostream>
#include<malloc.h>
#define MAXNUM 100
#define elemtype int
#define true 1
#define false 0
typedef struct
{
elemtype queue[MAXNUM];
int front;
int rear;
}sqqueue;
//入队
int append(sqqueue &q,elemtype x){
// cout<<"append"<<endl;
if((q.rear+1)%MAXNUM==q.front){//queue is full
cout<<"queue is full, cannot append"<<endl;
return false;
}
//not full, add element
q.queue[q.rear]=x;
q.rear=(q.rear+1)%MAXNUM;
return true;
}
//出队
elemtype Delete(sqqueue &q){
cout<<"delete"<<endl;
elemtype e=NULL;
if(q.front==q.rear){//is empty
cout<<"queue is empty, cannot delete"<<endl;
return e;
}
e=q.queue[q.front];
q.front=(q.front+1)%MAXNUM;
if(q.front==q.rear){//no element in queue
q.front=q.rear=NULL;
}
return e;
}
//判断队列是否为空
int empty(sqqueue &q){
cout<<"empty"<<endl;
if(q.front==q.rear){
cout<<"queue is empty"<<endl;
return true;
}else{
cout<<"queue is not empty"<<endl;
return false;
}
}
//取队头元素
int gethead(sqqueue &q){
cout<<"gethead"<<endl;
cout<<"head is "<<q.queue[q.front]<<endl;
return true;
}
//初始化
int initqueue(sqqueue &q){
// if(!q) return false;
q.front=0;
q.rear=0;
return true;
}
//建立顺序队列
void setsqqueue(sqqueue &q){
int n,i,m;
printf("\n请输入将要入顺序队列的长度:");
scanf("%d",&n);
printf("\n请依次输入入顺序队列的元素值:\n");
for(i=0;i<n;i++)
{
scanf("%d",&m);
append(q,m);
}
}
//遍历队列
void display(sqqueue &q){
int s,len,i;
s=q.front ;
if(q.front ==q.rear )
printf("队列空!\n");
else {
len=(q.rear-q.front+MAXNUM)%MAXNUM;
printf("\n顺序队列依次为:");
for(i=0;i<len;i++){
cout<<q.queue[(q.front+i)%MAXNUM]<<"<-"<<endl;
}
printf("\n");
printf("顺序队列的队尾元素所在位置:rear=%d\n",q.rear );
printf("顺序队列的队头元素所在位置:front=%d\n",q.front );
}
}
链式队列
main.cpp
#include <iostream>
#include<malloc.h>
#define MAXNUM 100
#define elemtype int
#define true 1
#define false 0
#include"queue.h"
using namespace std;
int main(){
lqueue p;
int x,cord;
printf("\n****第一次操作请选择初始化并建立链队列!******\n");
do{
printf("\n 链队列的基本操作!\n\n");
printf("=======================\n");
printf(" 主菜单:\n");
printf("=======================\n");
printf("\n 1 初始化并建立链队列 \n");
printf("\n 2 入链队列 \n");
printf("\n 3 出链队列 \n");
printf("\n 4 遍历链队列 \n");
printf("\n 5 结束程序运行 \n");
printf("\n======================\n");
scanf("%d",&cord);
switch(cord){
case 1:{
// p=(lqueue *)malloc(sizeof(lqueue));
creat(p);
display(p);
break;}
case 2:{
printf("请输入队列元素的值:x=");
scanf("%d",&x);
lappend(p,x);
display(p);
break;}
case 3:{
printf("出链队列元素:x=%d \n",ldelete(p));
display(p);
break;}
case 4:{
display(p);
break;}
case 5:
exit(0);
}
}while(cord<=5);
return 0;
}
queue.h
#include<stdio.h>
#include<iostream>
#include<malloc.h>
#define MAXNUM 100
#define elemtype int
#define true 1
#define false 0
using namespace std;
typedef struct qnode{
elemtype data;
struct qnode *next;
}qnodetype,*node;
typedef struct{
qnodetype *front;
qnodetype *rear;
}lqueue;
//入链队列
void lappend(lqueue &q,int x){
cout<<"lappend"<<endl;
node p=new qnodetype;
p->data=x;
p->next=NULL;
q.rear->next=p;
q.rear=p;
}
//初始化并建立链队列
void creat(lqueue &q){
node h;
int i,n,x;
printf("输入将建立链队列元素的个数:n=");
scanf("%d",&n);
// h=(qnodetype *)malloc(sizeof(qnodetype));
h=new qnodetype;
if(!h) exit(-2);
h->next=NULL;
q.front=h;
q.rear=h;
for(i=1;i<=n;i++){
printf("链队列第 %d 个元素的值为:",i);
scanf("%d",&x);
lappend(q,x);
}
}
//出链队列
elemtype ldelete(lqueue &q){
cout<<"ldelete"<<endl;
elemtype e=NULL;
if(q.front==q.rear){
return e;
}
node p=new qnodetype;
p=q.front->next;
e=p->data;
q.front->next=p->next;
delete p;
return e;
}
//遍历链队列
void display(lqueue &q){
node p;
p=q.front->next ;
printf("\n链队列元素依次为:");
while(p!=NULL){
printf("%d-->",p->data );
p=p->next ;
}
printf("\n\n遍历链队列结束!\n");
}