队的顺序实现和链接实现

队–先进先出的线性表

顺序实现

#include<iostream>
using namespace std;

typedef int datatype;
const int maxsize=100;
typedef struct{
	datatype data[maxsize];
	int front,rear;
}sqqueue;

//初始化 
void init_sqqueue(sqqueue *sq){
	sq->front=sq->rear=0;
}

//判队空 
int empty_sqqueue(sqqueue *sq){
	if(sq->rear==sq->front) return 1;
	else return 0;
}

//取队头 
int gethead_sqqueue(sqqueue *sq,datatype *x){
	if(empty_sqqueue(sq)==1){cout<<"队空,无队头可取!\n";return 0;}
	*x=sq->data[(sq->front+1)%maxsize];
	return 1;
}

//入队 
int en_sqqqueue(sqqueue *sq,datatype x){
	if((sq->rear+1)%maxsize==sq->front){
		cout<<"队满,不能入队!\n";return 0;
	}
	sq->rear=(sq->rear+1)%maxsize;
	sq->data[sq->rear]=x;
	return 1;
}

//出队 
int de_sqqueue(sqqueue *sq,datatype *x){
	if(empty_sqqueue(sq)==1){
		cout<<"队空,不能出队!\n";return 0;
	}
	sq->front=(sq->front+1)%maxsize;
	*x=sq->data[sq->front];
	return 1;
}

int main(){
	sqqueue sq;
	int x;
	int i;
	datatype k = 0;
	do{
		cout<<"0、退出"<<endl;
		cout<<"1、初始化"<<endl;
		cout<<"2、判队空"<<endl;
		cout<<"3、入队"<<endl; 
		cout<<"4、出队"<<endl;
		cout<<"5、取队头"<<endl;
		cin>>x;
		switch(x){
			case 0: return 0;
			case 1: init_sqqueue(&sq);break;
			case 2: i = empty_sqqueue(&sq);
					if(i){
						cout<<"队空\n"<<endl;
					}else cout<<"队不为空\n"<<endl;		
					break;
			case 3: i = en_sqqqueue(&sq,5);
					if(i){
						cout<<"入队成功\n"<<endl;
					}
					break;
			case 4: de_sqqueue(&sq,&k);break;
			case 5: i = gethead_sqqueue(&sq,&k);
					if(i){
						cout<<"队顶元素:"<<k<<endl;
					}
					break;
		}
	}while(x!=0);
	return 0;
}

链接实现

# include<iostream>
using namespace std;

typedef int datatype;
typedef struct node *pointer;
struct node{
	datatype data;
	pointer next;
};
typedef struct{
	pointer front,rear;
}lkqueue;

//初始化 
void init_lkqueue(lkqueue *lq){
	pointer p;
	p=new node;
	p->next=NULL;
	lq->front=lq->rear=p;
}

//判队空 
int empty_lkqueue(lkqueue *lq){
	if(lq->rear==lq->front) return 1;
	else return 0;
}

//取队头 
int gethead_lkqueue(lkqueue *lq,datatype *x){
	pointer p;
	if(empty_lkqueue(lq)==1){
		cout<<"队空,无队头可取!\n";return 0;
	}
	p=lq->front->next;
	*x=p->data;
	return 1;
}

//入队 
void en_lkqueue(lkqueue *lq,datatype x){
	pointer p;
	p=new node;
	p->data=x;
	lq->rear->next=p;
	lq->rear=p;
	p->next=NULL;
}

//出队 
int de_lkqueue(lkqueue *lq,datatype *x){
	pointer s;
	if(empty_lkqueue(lq)==1){
		cout<"队空,不能出队!\n";return 0;
	}
	s=lq->front;
	*x=s->next->data;
	lq->front=s->next;
	delete s;
	return 1;
}

int main(){
	lkqueue lk;
	int x;
	int i;
	int k = 0;
	do{
		cout<<"0、退出"<<endl;
		cout<<"1、初始化"<<endl;
		cout<<"2、判队空"<<endl;
		cout<<"3、入队"<<endl; 
		cout<<"4、出队"<<endl;
		cout<<"5、取队顶"<<endl;
		cin>>x;
		switch(x){
			case 0: return 0;
			case 1: init_lkqueue(&lk);break;
			case 2: i = empty_lkqueue(&lk);
					if(i){
						cout<<"队空"<<endl;
					}else cout<<"队不为空"<<endl;		
					break;
			case 3: en_lkqueue(&lk,1);break;
			case 4: de_lkqueue(&lk,&k);break;
			case 5: i = gethead_lkqueue(&lk,&k);
					if(i){
						cout<<"队顶元素:"<<k<<endl;
					}
					break;
		}
	}while(x!=0);
	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值