1. 程式人生 > >資料結構必須掌握內容佇列--入隊,出隊

資料結構必須掌握內容佇列--入隊,出隊

棧的壓棧出棧的順序是: 先進後出 ; 但是佇列的入隊和出隊是:先進先出。 我上一篇實現了棧的壓棧出棧,這次實現的佇列的先進先出,廢話不多說,附上程式碼和執行結果:
#include"stdafx.h"
#include<iostream>
using namespace std;

typedef class queue
{
public:
	int *pbase;
	int front;
	int rear;
}QUEUE;


void initqueue(QUEUE *);//初始化佇列
bool full_queue(QUEUE *);//判斷佇列是否已滿
bool en_queue(QUEUE *,int);//入隊
void traverse_queue(QUEUE *);//遍歷佇列
bool empty(QUEUE *);//判斷佇列是否為空
bool out_queue(QUEUE *,int *);//出隊

void initqueue(QUEUE *pq)
{
	pq->pbase=new int[6];
	pq->front=0;
	pq->rear=0;
}
bool full_queue(QUEUE *pq)
{
	if((pq->rear+1)%6==pq->front)
		return true;
	else
		return false;
}
bool en_queue(QUEUE *pq,int val)//入隊操作r,取r,p->rear即是r,然後進行操作
{
	if(full_queue(pq))
		return false;
	else
	{
		pq->pbase[pq->rear]=val;
		pq->rear=(pq->rear+1)%6 ;//這裡相當於陣列下標r=(r+1)%6,p->rear就是取r的值,然後p->rear+1是先取r的值,然後加1,最後再對長度取餘
		return true;
    }
}

void traverse_queue(QUEUE *pq)//遍歷佇列,需要定義一個下標進行操作
{
	int i=pq->front;//這裡定義一個數組下標,進行佇列的遍歷
	if(i==pq->rear)
		cout<<"為空"<<endl;
	else
	{
		while(i!=pq->rear)
		{
			cout<<pq->pbase[i]<<" ";
			i=(i+1)%6;//所有環型陣列的遞增都是(n+1)%長度,所以i的遞增也要滿足
		}

	}
}
bool empty(QUEUE *pq)
{
	if(pq->front==pq->rear)
		return true;
	else
		return false;
}
bool out_queue(QUEUE *pq,int *val)
{
	if(empty(pq))
	{
		cout<<"出隊失敗..."<<endl;
		return false;
	}
	else
	{
		*val=pq->pbase[pq->front];
		pq->front=(pq->front+1)%6;
		cout<<"出隊成功,出隊元素為:"<<*val<<endl;
		return true;
	}
}
int main()
{
	int val,n;
	QUEUE Q;
	initqueue(&Q);
	for(n=1;n<6;n++)
	{
		en_queue(&Q,n);
	}
	traverse_queue(&Q);
	out_queue(&Q,&val);
	traverse_queue(&Q);
	system("pause");
	return 0;
}

最後說一句,萬事開頭難,貴在堅持!加油,何永健!

相關推薦

資料結構必須掌握內容佇列--入隊

棧的壓棧出棧的順序是: 先進後出 ; 但是佇列的入隊和出隊是:先進先出。 我上一篇實現了棧的壓棧出棧,這次實現的佇列的先進先出,廢話不多說,附上程式碼和執行結果: #include"stdafx.h"

資料結構必須掌握 棧---壓棧和

今天剛學到壓棧出棧,就把這個具體過程都實現了一遍,廢話不多說,程式碼如下:#include"stdafx.h" #include<iostream> using namespace st

C語言 單鏈表實現佇列(初始化入隊元素個數首元素是否為空)

單鏈表實現佇列: 連結串列為空的判斷條件:pQueue->pFront==pQueue->pRear或者若結構體中存在數的個數時,判斷pQueue->size==0,即元素個數為0 標頭檔案:佇列.h #pragma once #include<

佇列的初始化入隊計算的長度遍歷鏈銷燬佇列

#include "stdio.h" #include "stdlib.h" typedef struct node{ int data; struct node *next; }*pnode; typedef struct queue{ pnode front; pno

迴圈佇列的順序儲存實現(入隊銷燬遍歷等)

迴圈佇列的順序儲存實現,包括入隊,出隊,清隊,銷燬隊,遍歷佇列等 佇列(queue)是一種先進先出(first in fist out,縮寫為FIFO)的線性表,它只允許在表的一端進行插入,而在另一端進行刪除元素。允許插入的一端稱為隊尾(rear),允許刪除的一

佇列的簡單操作(入隊輸出元素等)

定義一個節點,裡面包含元素型別,指向下一個節點的指標。然後定義一個結構體,裡面兩個指標,指向隊頭和隊尾 typedef struct QNode { int data; struct QNode * next; }QNode, * Queue; typedef s

js資料結構 -- 連結串列, 雙向連結串列迴圈連結串列

陣列作為js常用的資料結構,存取元素都非常的方便,但是其內部的實現原理跟其他計算機語言對陣列的實現都是一樣的。 由於陣列在記憶體中的儲存是連續的,所以當在陣列的開頭或者中間插入元素時,內部都需要去移動其他元素的位置,這個移動元素的成本很高。 連結串列也是儲存有序的元素集合,但不同

建立一個順序佇列實現佇列入隊操作。

標頭檔案: #ifndef seqqueue_H #define seqqueue_H const int queuesize=10; class seqqueue { int rear,front; int data[queuesize]; public: seqqueue(){front

Python資料結構之: 棧與佇列

棧(stacks) 是一種只能通過訪問其一端來實現資料儲存與檢索的線性資料結構,具有後進先出(last in first out,LIFO)的特徵 stack = [] stack.append("A") #A入棧 stack.append("B") #B入棧 st

資料結構 鏈式佇列C/C++

列隊分為鏈式儲存 與 順序儲存 下面給出小編寫的順序儲存的連結https://blog.csdn.net/qq_40990854/article/details/82846939 這篇是小編寫的鏈式儲存。 思路: 佇列是一個先進先出的特點,在連結串列的表頭 head作為固定不動的

我理解的資料結構(三)—— 佇列(Queue)

我理解的資料結構(三)—— 佇列(Queue) 一、佇列 佇列是一種線性結構 相比陣列,佇列對應的操作是陣列的子集 只能從一端(隊尾)新增元素,只能從另一端(隊首)取出元素 佇列是一種先進先出的資料結構(FIFO) 二、陣列佇列與迴圈佇列 1. 陣列佇列 如果你有看過我之前

作為阿里雲年薪500k大資料工程師必須掌握以下三種技能

阿里雲 大資料在近幾年的發展速度確實超出人們的預料,自2014年3月“大資料”首次出現在《政府工作報告》中以來,國務院常務會議一年內6次提及大資料運用,而且不管是在數博會還是今年的G20當中,大資料“存在感”極高。我是一個大資料程式設計師,建了一個大資料資源共享群5931

資料結構(四)佇列

一、基本概念 1、特點: 在佇列頭部進行刪除,在佇列的尾部進行插入操作 2、主要實現: 使用迴圈陣列 使用連結串列 3、關係圖: 二、Queue public interface Queue<E> extends

資料結構 - 基於陣列的佇列

佇列Queue   *佇列也是一種線性結構   *相比於陣列,佇列對應的操作是陣列的子集   *只能從一端(隊尾)新增元素,從另一端(隊首)取出元素   *佇列是一種先進先出的資料結構(先到先得 First In First Out)      基於陣列的佇列實現的原始碼如下:  

資料結構筆記-棧與佇列python實現

概述 棧與佇列是程式設計中被廣泛應用的兩種重要的資料結構,都是在特定範圍的儲存單元記憶體儲資料,這些資料都可以被重新取出使用,與線性表相比,他們的插入和刪除受到更多的約束,固又稱限定性的線性表結構。他們是最簡單的快取結構,他們只支援資料項的儲存與訪問,不支援資料項之間的任何關係。因此,這兩種

資料結構與演算法之佇列

  1、如何理解"佇列"? 類比棧,棧只支援兩個基本操作:入棧push()和出棧pop()。對於佇列的基本操作也只有兩個:入隊enqueue(),放一個數據到佇列尾部;出隊dequeue(),從佇列頭部去一個元素。(如下圖) 2、順序佇列和迴圈佇列 用陣列實現的佇

Java資料資料結構(三)——佇列

今天但看了大二資料結構這本書,對佇列進行一個整理。 文章目錄 一、什麼是佇列 二、順序陣列實現佇列 三、迴圈陣列實現佇列 四、連結串列實現佇列 一、什麼是佇列 佇列和棧一樣,都是一種受限制的線性表。佇列元素只能從隊尾插入(稱為入隊

java版資料結構與演算法—優先順序佇列

/** * 優先順序佇列,排好序的佇列插入和刪除 */ class PriorityQueue { int a[]; int maxSize; int nItems; public PriorityQueue(int size){ maxS

資料結構之雙端佇列(Deque)

1,雙端佇列定義   雙端佇列:其兩端都可以入列和出列的資料結構,如下圖所示,佇列後面(rear)可以加入和移出資料,佇列前面(front)可以加入和移出資料        雙端佇列操作: deque=Deque() # 建立雙端佇列 addFront(item) #在佇列前面加入資料 a

看得見的資料結構Android版之佇列

零、前言 1.現實世界裡我們更多講究的是先來後到,先排隊先買票,這樣才有秩序,畢竟我們沒有計算機那麼有耐心 2.使用佇列結構能很好的模擬和解決類似生活中的事,比如訊息的傳送用佇列維護就是非常恰當的 3.佇列就像去動物園買票,先處理佇列的頭部,有新的人來了就後面排著去,慢慢等 4.還有一種很有意思的佇列