数据结构-队列-c/c++

顺序队列

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");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值