c语言链队的实现

版权声明:转载请注明出处 https://blog.csdn.net/doubleguy/article/details/84075351
#include<bits/stdc++.h>
typedef int Status;
using namespace std;
typedef struct QNode{
	int data;
	struct QNode *next;
}QNode,*QueuePtr;

typedef struct{
	QueuePtr front;//队头指针 
	QueuePtr rear;//队尾指针 
}LinkQueue;

Status InitQueue(LinkQueue &q){
	q.front = q.rear = new QNode;
	q.front->next = NULL;
	return 1;
}

Status EnQueue(LinkQueue &q,int e){
	QNode *p = new QNode;
	p->data = e;
	p->next = NULL;
	q.rear->next = p;
	q.rear = p;
	return 1;
}

Status DeQueue(LinkQueue &q,int &e){
	if(q.front == q.rear)
		return 0;
	QNode *p = q.front->next;	
	e = p->data;
	q.front->next = p->next;
	if(q.rear == p)
		q.rear = q.front;//当最后一个元素被删除,队尾指针指向头结点 
	delete p;
}

int GetHead(LinkQueue q){
	if(q.front != q.rear)
		return q.front->next->data;
	exit(-2);
}

void PrintQueue(LinkQueue q){
	if(q.rear == q.front)
		return ;
	q.front = q.front->next;
	while(1){
		cout<<q.front->data<<" ";
		if(q.rear == q.front)
			break;
		q.front = q.front->next;
	}
	cout<<endl;
}

int main(){
	int status;
	int e;
	int n;
	LinkQueue q;
	status = InitQueue(q);
	if(status)
		cout<<"链队初始化成功,你已经创建了一个空链队!"<<endl;
	 cout<<"请输入你想入队的元素的个数:";
	 cin>>n;
	 cout<<"请输入"<<n<<"个数:"; 
	 for(int i=0;i<n;i++){
	 	cin>>e;
	 	status = EnQueue(q,e);
	 	if(status)
	 		cout<<e<<"入队成功!"<<endl;
	 	cout<<"当前队列中的元素依次为:";
	 	PrintQueue(q);
	 }
	 cout<<"当前队头元素为:"<<GetHead(q)<<endl;
	 cout<<"请输入你想出列的元素个数:";
	 cin>>n;
	 for(int i=0;i<n;i++){
	 	status = DeQueue(q,e);
	 	if(status){
	 		cout<<"出队成功,出队的元素为:"<<e<<endl;
		 }
		 cout<<"当前队列中的元素依次为:";
		 PrintQueue(q);
	 }
	 cout<<"当前队头元素为:"<<GetHead(q)<<endl;
	return 0;
} 

猜你喜欢

转载自blog.csdn.net/doubleguy/article/details/84075351