首页 > 其他分享 >链队列

链队列

时间:2023-01-18 15:33:59浏览次数:36  
标签:QNode 队列 LinkQueue Next int front rear


    include <iostream>
    
    using namespace std;
    
    #define OK 1
    #define ERROR 0
    
    typedef int ElemType;
    typedef struct QNode {
    	ElemType data;
    	struct QNode* Next;
    }QNode,*QueuePtr;
    typedef struct {
    	QueuePtr front;
    	QueuePtr rear;
    }LinkQueue;
    
    int InitQueue(LinkQueue& Q) {
    	Q.front = Q.rear = new QNode;
    	Q.front->Next = NULL;
    	return OK;
    }
    
    int EnQueue(LinkQueue& Q, ElemType e) {
    	QueuePtr p;
    	p = new QNode;
    	p->data = e;
    	p->Next = NULL;
    	Q.rear->Next = p;
    	Q.rear = p;
    	return OK;
    }
    
    int DeQueue(LinkQueue& Q, ElemType& e) {
    	if (Q.front == Q.rear) return ERROR;
    	QueuePtr p;
    	p = Q.front->Next;
    	e = p->data;
    	Q.front->Next = p->Next;
    	delete p;
    	return OK;
    }
    
    int GetHead(LinkQueue Q) {
    	if (Q.front != Q.rear)
    		return Q.front->Next->data;
    	else{
    		cout << "错误" << endl;
    		return ERROR;
    	}
    
    }
    
    int main()
    {
    	cout << "0、退出程序" << endl;
    	cout << "1、队列入队" << endl;
    	cout << "2、队列出队" << endl;
    	cout << "3、取头元素" << endl;
    	cout << "---------------------------" << endl;
    	
    	LinkQueue lq;
    	InitQueue(lq);
    	int num,n,status,elem,temp;
    	while (true) {
    		cout << "你的选择:" << endl;
    		cin >> num;
    		cout << "---------------------------" << endl;
    		switch (num)
    		{
    		case 1:
    			cout << "你想插入的数:";
    			cin >> n;
    			status = EnQueue(lq, n);
    			if (status == 1) {
    				cout << " 插入成功。" << endl;
    				cout << "---------------------------" << endl;
    				continue;
    			}
    			else {
    				cout << "操作失败!" << endl;
    				cout << "---------------------------" << endl;
    				continue;
    			}
    		case 2:
    			status = DeQueue(lq, temp);
    			if (status == 1) {
    				cout << "出队成功。"<< endl;
    				cout << "---------------------------" << endl;
    				continue;
    			}
    			else {
    				cout << "操作失败!" << endl;
    				cout << "---------------------------" << endl;
    				continue;
    			}
    		case 3:
    			elem = GetHead(lq);
    			if (elem) {
    				cout << "当前元素为" << elem << endl;
    				cout << "---------------------------" << endl;
    				continue;
    			}
    			else {
    				cout << "操作失败!" << endl;
    				cout << "---------------------------" << endl;
    				continue;
    			}
    		case 0:
    			break;
    		default:
    			cout << "输入错误!" << endl;
    			cout << "---------------------------" << endl;
    			continue;
    		}
    		break;
    	}
    
    
    
    
    }


标签:QNode,队列,LinkQueue,Next,int,front,rear
From: https://www.cnblogs.com/qianyuzz/p/17059921.html

相关文章

  • TCP 队列
    一、TCP队列1、synsqueue:半连接队列TCP三次握手(参考:TCP建立连接之三次握手),第一步,服务端接收到客户端发送的syn消息后,将连接信息放入synsqueue,此时,双方连接尚未建......
  • 数据结构-队列
    数据结构-队列队列是一种特殊的线性表,他的性质只允许元素从最后入,从最前出,所以他也满足FIFO(FirstInFirstOut)性质,也就是先进先出。我们可以先试着使用函数在C++中定......
  • RabbitMQ 高级消息队列协议
    https://blog.csdn.net/qq_46127735/article/details/120498245http://www.codebaoku.com/it-linux/it-linux-112105.htmlhttps://baike.baidu.com/item/rabbitmq/937214......
  • 如何设计一个消息队列?
    本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校......
  • 如何设计一个消息队列?
    本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招......
  • P1886 滑动窗口 /【模板】单调队列
    滑动窗口/【模板】单调队列题目描述有一个长为\(n\)的序列\(a\),以及一个大小为\(k\)的窗口。现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的......
  • 单调栈与单调队列
    目录单调栈单调队列栈与队列基础:https://www.cnblogs.com/hellohebin/p/16920864.html单调栈例题洛谷P5788【模板】单调栈洛谷P1901发射站单调队列例题洛谷......
  • 【Java 数据结构及算法实战】系列 013:Java队列07——双端队列Deque
    双端队列(Deque),顾名思义是可以在队列的两端插入和移除元素的特殊队列。Java提供了java.util.Deque<E>接口以提供对双端队列的支持。该接口是JavaCollectionsFramework的一......
  • 【Java数据结构及算法实战】系列008:Java队列02——阻塞队列BlockingQueue
    阻塞队列(BlockingQueue)是一种支持额外操作的队列,这两个附加的操作是:l  在队列为空时,获取元素的线程会等待队列变为非空。l  当队列满时,存储元素的线程会等待队列可用。J......
  • 栈、队列以及环形缓冲区
    栈和队列,都可以不通过指定地址和索引来对数组的元素进行读写。需要临时保存计算过程中的数据、连接在计算机上的设备或者输入输出的数据时,都可以通过这些方法来使用内存。......