1. 程式人生 > >【資料結構】環形佇列的基本操作

【資料結構】環形佇列的基本操作

編譯環境VS2008

Queue.h

####為了解決順序佇列的假溢位的問題,設計了環形佇列

#pragma once

#include <assert.h>
#include <stdio.h>

#define MAX_SIZE 8
typedef int DataType;

typedef struct Queue
{
	DataType _array[MAX_SIZE];
	int _front;
	int _back;
	int _count;
}Queue;

//佇列的初始化
void QueueInit(Queue* q);

//入佇列
void QueuePush(Queue* q,DataType data);

//出佇列
void QueuePop(Queue* q);

//判斷佇列是否為空
int QueueEmpty(Queue* q);

//佇列的元素的個數
int QueueSize(Queue* q);

//對頭元素
DataType QueueFront(Queue * q);

//隊尾元素
DataType QueueBack(Queue* q);

Queue.c

#include "queue.h"

//佇列的初始化
void QueueInit(Queue* q)
{
	assert(q);
	q->_front = q->_back = 0;
	q->_count = 0;
};


//入佇列
void QueuePush(Queue* q,DataType data)
{
	assert(q);
	if(MAX_SIZE == q->_count)
	{
		printf("佇列已滿!!!\n");
		return;
	}
	q->_array[q->_back++] = data;
	if(q->_back == MAX_SIZE)
		q->_back = 0;

	q->_count++;
}

//出佇列
void QueuePop(Queue* q)
{
	assert(q);
	if(QueueEmpty(q))
	{
		printf("佇列元素為空!\n");
		return;
	}
	++(q->_front);
	if(q->_front == MAX_SIZE)
		q->_front = 0;

	q->_count--;
}

//判斷佇列是否為空
int QueueEmpty(Queue* q)
{
	assert(q);
	return q->_count == 0;
}

//佇列的元素的個數
int QueueSize(Queue* q)
{
	assert(q);
	return q->_count;
}

//對頭元素
DataType QueueFront(Queue * q)
{
	assert(q);
	return q->_array[q->_front];
}

//隊尾元素
DataType QueueBack(Queue* q)
{
	assert(q);
	if(0 != q->_back)
		return q->_array[q->_back-1];

	return q->_array[MAX_SIZE-1];
}

test.c

#include "queue.h"

void test();
int main()
{
	test();
	return 0;
}
void test()
{
	Queue q;
	QueueInit(&q);
	QueuePush(&q,1);
	QueuePush(&q,2);
	QueuePush(&q,3);
	QueuePush(&q,4);
	QueuePush(&q,5);
	QueuePush(&q,6);
	printf("size = %d\n",QueueSize(&q));
	printf("front = %d\n",QueueFront(&q));
	printf("back = %d\n",QueueBack(&q));

	QueuePop(&q);
	QueuePop(&q);
	printf("size = %d\n",QueueSize(&q));
	printf("front = %d\n",QueueFront(&q));
	printf("back = %d\n",QueueBack(&q));
}

相關推薦

資料結構環形佇列基本操作

編譯環境VS2008 Queue.h ####為了解決順序佇列的假溢位的問題,設計了環形佇列 #pragma once #include <assert.h> #include <s

資料結構單鏈表-----基本操作

刪除指定位置的節點 void Erase(pList * pplist, pNode pos) { assert(pplist != NULL); assert(pos != NULL); if (*pplist == pos)//如果指向第一個節點

資料結構圖的基本操作——圖的構造(鄰接矩陣,鄰接表),遍歷(DFS,BFS)

鄰接矩陣實現如下: /* 主題:用鄰接矩陣實現 DFS(遞迴) 與 BFS(非遞迴) 作者:Laugh 語言:C++ ******************************************* 樣例輸出如下: 請選擇圖的型別(a - 無向圖, b - 有向圖):a 請輸入總頂點

資料結構迴圈佇列的認識和基本操作

迴圈佇列初始條件:隊頭指標(front)=隊尾指標(rear)=0 迴圈佇列隊滿條件:(rear+1)%size == front        (size是順序表的最大儲存空間) 迴圈佇列空條件:隊頭指標(rear)=隊尾指標(front) 隊頭指標向前移動計算:隊頭指標=(rear+1)%size    

資料結構環形連結串列

給定一個連結串列,判斷連結串列中是否有環。 思路分析: 判斷連結串列是否帶環,實際上歸屬於快慢指標問題,快指標先進環,慢指標後進環,然後快指標和慢指標最終會在環裡面相遇,如果不會相遇,則表示不是迴圈連結串列,也就是說到頭了,即不帶環。 具體程式碼如下: /**

資料結構順序表的操作函式

SeqList.h #ifndef __SEQLIST_H__ #define __SEQLIST_H__ #include <stdio.h> #include <assert.h> #include <malloc.h> #include <window

資料結構順序佇列的實現(C語言)

佇列的基本概念及其描述 佇列是一種特殊的線性表,它的特殊性在於佇列的插入和刪除操作分別在表的兩端進行。 插入的那一端稱為隊尾,刪除的那一端稱為隊首。佇列的插入操作和刪除操作分別稱為進隊和出隊。 先進先出(First In First Out) 順序佇列要掌握以下操作:

資料結構迴圈佇列的實現

#include<stdio.h> #include<stdlib.h> #include<string.h> #include<time.h> #define TURE 1 #define FALSE 0 #de

資料結構順序佇列

一、順序佇列的概念和分類 1、概念:順序佇列的底層結構是資料儲存元素的,用兩個整形數字來表示隊頭和隊尾的下標front和back 2、順序佇列根據出入元素方式不同分為兩種形式 二、程式碼展示 1、隊頭

資料結構迴圈佇列的應用(一)列印楊輝三角

列印楊輝三角 楊輝三角是比較常見的佇列的應用,下面一行的數是上面2個數字的和,數列首位都是1,高中數學裡牛頓二項式展開式應該有說。 程式碼收穫 這題主要是找規律。利用下面一行比上面一行數字多一個,佇列頭為上一行,除了入隊首尾的1之外,入隊的上一行2個數的和

資料結構迴圈佇列

上次實現了陣列佇列,這次來實現迴圈佇列 迴圈佇列的幾個要點,front指向隊頭元素,tail指向隊尾元素的下一個位置,front=tail時佇列為空,(front+1)% data.Length = tail時佇列為滿,還是會使用第一節所編寫的陣列類做最底層。

C/C++資料結構雙向連結串列操作

目錄 標頭檔案定義 測試檔案 雙向連結串列操作 像雙向連結串列的求長,判空,遍歷,查詢,檢索,之類的操作都和單鏈表一樣的。不過我還是在了文中。 標頭檔案定義 #ifndef _DOUBLELINKLIST_H_ #def

資料結構佇列基本認識和佇列基本操作

一.佇列的概念佇列是一種先進先出的線性表(棧是先進後出)。它只允許在表的一端進行插入,或者刪除元素。 進入插入操作的一端稱為隊尾(rear)(入佇列) 進行刪除操作的一端稱為對頭(front)(出佇列)  佇列具有先進先出的(FIFO)的特性二.順序佇列   1.隊頭不動,出

資料結構二叉樹基本操作

文章目錄 BinaryTree.h BinaryTree.c Test.c 棧和佇列的相關函式: 棧:https://blog.csdn.net/weixin_41892460/article/details/82

資料結構二叉搜尋樹的插入,刪除,查詢等基本操作的實現

1、基本概念 二叉搜尋樹:又稱二叉排序樹,它或者是一棵空樹,或者是具有以下性質的二叉樹 若它的左子樹不為空,則左子樹上所有節點的值都小於根節點的值 若它的右子樹不為空,則右子樹上所有節點的值都大於根節點的值 它的左右子樹也分別為二叉搜尋樹 沒有鍵值相等的節

資料結構線索二叉樹的基本操作 構造 找前驅 找後繼

                     上圖所示的二叉連結串列,存在多個空指標域。假設一個二叉連結串列的結點數為n,則共有2n個指標域。而n個結點的二叉樹共有n-1條分支。所以空指標域的個數為:2n - (n-1) = n+1。可以在這n+1個空指標域中儲存結點的(以先序、

資料結構--1.連結串列的基本操作和雜湊表定義

C實現連結串列的基本操作 初始化 插入 刪除  雜湊表的定義  //連結串列的基本操作 初始化 插入 刪除 雜湊表的定義 #include<iostream> using namespace std; typedef struct Node { int

資料結構單鏈表的實現與基本操作C++

最近在複習資料結構,自己用C++寫了單鏈表這一塊的一些程式碼。 以下是帶頭結點單鏈表的建立和查詢等的程式碼。 #include <iostream> using namespace std; //單鏈表 struct LNode{ int data; st

第四章 串的基本操作資料結構

#include<stdio.h> #include<string.h> #include<stdlib.h> #include<malloc.h> #define ERROR 0 #define OK 1 #define MAXSIZE 1000 type

資料結構雜湊表及雜湊桶的基本操作

  順序搜尋和二叉搜尋樹中,元素儲存位置和元素各關鍵碼之間沒有對應的關係,這就導致在查詢一個元素時,必須經過關鍵碼的多次比較。那麼是否有這樣一種資料結構,可以不經過任何比較,直接找到想要搜尋的元素呢?答案是肯定的,那就是通過某種函式(hashFunc)使得元素的儲存位置與它的