環形佇列的定義與操作
看程式碼理解吧。。。
/************************************************************************* > File Name: queue_2.c > Author: Netcan > Mail: [email protected] > Created Time: 2014/12/23 16:09:30 ************************************************************************/ #include<stdio.h> #include<malloc.h> struct Queue { // 定義一個環形佇列(靜態佇列) int * pBase; // 存放資料的陣列 int front; // 佇列首下標 int rear; // 佇列尾下標,指向最後一個有效資料的後一個 int size; // 佇列大小 }; void init_Queue(Queue *Q); // 初始化佇列 bool is_empty_Queue(Queue *Q); // 檢測佇列是否為空 bool is_full_Queue(Queue *Q); // 檢測佇列是否滿 bool in_Queue(Queue *Q, int val); // 入隊 bool out_Queue(Queue *Q); // 出隊 void traverse_Queue(Queue *Q); // 遍歷佇列 int main() { Queue Q; // 宣告一個佇列 init_Queue(&Q); // 初始化 if(is_empty_Queue(&Q)) // 檢測佇列是否為空 puts("Queue empty."); in_Queue(&Q, 0); // 入隊 in_Queue(&Q, 1); in_Queue(&Q, 2); in_Queue(&Q, 3); in_Queue(&Q, 4); in_Queue(&Q, 5); in_Queue(&Q, 6); in_Queue(&Q, 7); in_Queue(&Q, 8); in_Queue(&Q, 9); if(is_full_Queue(&Q)) // 檢測佇列是否滿 puts("Queue full."); traverse_Queue(&Q); // 輸出佇列 out_Queue(&Q); // 出隊 out_Queue(&Q); traverse_Queue(&Q); return 0; } void init_Queue(Queue *Q) { Q->size = 11; // 設佇列大小為11 Q->pBase = (int *)malloc(sizeof(int)*Q->size); // 分配記憶體用於儲存資料 Q->rear = Q->front = 0; // 初始化首尾下標 return; } bool is_empty_Queue(Queue *Q) { if(Q->front == Q->rear) // 如果首尾下標相等則空 return true; else return false; } bool is_full_Queue(Queue *Q) { if( (Q->rear + 1)%Q->size == Q->front ) // 如果尾下標的下一個是首下標則滿 return true; else return false; } bool in_Queue(Queue *Q, int val) { if( is_full_Queue(Q) ) // 滿的話就不能入隊 return false; Q->pBase[Q->rear] = val; // 入隊 Q->rear = (Q->rear + 1)%Q->size; // 尾下標後移 return true; } bool out_Queue(Queue *Q) { if( is_empty_Queue(Q) ) // 如果空的話就不能出隊 return false; Q->front = (Q->front + 1) % Q->size; // 首下標後移表示出隊 return true; } void traverse_Queue(Queue *Q) { for(int i = Q->front; i != Q->rear; i = (i+1)%Q->size) // i用於輸出元素的下標,當i等於尾下標輸出結束 printf("%3d",Q->pBase[i]); puts(""); return; }
執行圖:
相關推薦
環形佇列的定義與操作
看程式碼理解吧。。。 /************************************************************************* > File Name: queue_2.c > Author: N
鏈式佇列的定義與操作
看程式碼理解。。。 /************************************************************************* > File Name: queue.c > Author: Netcan
資料結構 筆記:樹的定義與操作
樹是一種非線性的資料結構 樹是由n(n>=0)個結點組成的有限集合 -如果 n = 0,成為空樹; -如果n > 0,則: ·有一個特定的稱之為根(root)的結點 ·根據點只有直接後繼,但沒有直接前驅 ·除根以外的其他結點劃分為m(m>=0)個互補相交的有
隊列的定義與操作——順序存儲和鏈式存儲
順序存儲 type void == int isf sem urn ont 隊列的 存儲結構 有 順序存儲 和 鏈式存儲。 1. 隊列的順序存儲與操作 (循環隊列) 1 typedef int Position; 2 struct QNode { 3
堆的定義與操作
與操作 down 下標 代碼 其中 cap 找到 truct style 如題,堆的定義與操作。 1 #define MAXDATA 1000 /* 該值應根據具體情況定義為大於堆中所有可能元素的值 */ 2 3 typedef struct H
資料結構 筆記:圖的定義與操作
定義 -圖是由頂點集合(Vertex)及頂點間的關係集合(Edge)組成的一種資料結構 -Graph = (V,E) -V= 是頂點的有窮非空集合 -E=是頂點之間關係的有窮集合 無向邊 -頂點x和y之間的邊沒有方向,則稱該邊為無向邊 -<x,y> 與<
線性表的定義與操作---連結串列
typedef struct LNode *PtrToLNode; struct LNode { ElementType Data; PtrToLNode Next; }; typedef PtrToLNode Position; typedef
【資料結構】環形佇列的基本操作
編譯環境VS2008 Queue.h ####為了解決順序佇列的假溢位的問題,設計了環形佇列 #pragma once #include <assert.h> #include <s
Javascript Jquery 中的陣列定義與操作
1.認識陣列陣列就是某類資料的集合,資料型別可以是整型、字串、甚至是物件Javascript不支援多維陣列,但是因為數組裡面可以包含物件(陣列也是一個物件),所以陣列可以通過相互巢狀實現類似多維陣列的功能1.1 定義陣列宣告有10個元素的陣列var a = new Array(10);此時為a已經開闢了記憶體
環形佇列——使用者對使用者自定義資料型別的相關操作
#ifndef CUSTOMER_H #define CUSTOMER_H #include using namespace std; class Customer { public: Customer(string name="",int age=0); void p
列表、元組、字典、集合的定義、操作與綜合練習
alt 定義 cor sco end OS bubuko move remove l = [‘Lucy‘,‘Abb‘,‘Lily‘] l.append(‘Abb‘) l.pop() print(1) t = (‘Lucy‘,‘Abb‘,‘Lily‘) scores =
PHP如何定義類及其成員屬性與操作
所有 有用 裏的 class 被子 析構 new 有一點 簡單 1、類的定義: 類的關鍵字定義使用class 1.定義一個空類 Class Person{}; 2.定義一個有成員屬性和操作的類 Class Person{ //成員屬性 $name = ‘‘
JavaScript的函式(定義與解析、匿名函式、函式傳參、return關鍵字)和陣列(操作資料的方法、多維陣列、陣列去重)
函式 函式就是重複執行的程式碼片。 1、函式定義與執行 <script type="text/javascript"> // 函式定義 function aa(){ alert('hello!'); } // 函式執行
集合的定義與並查操作
turn def 名稱 表示 span code += clas 整數 集合的定義與並查操作。 1 #define MAXN 1000 /* 集合最大元素個數 */ 2 typedef int ElementType;
佇列的定義和操作
一.定義 佇列是一種先進先出的邏輯結構。將允許刪除元素的一端稱為隊頭,允許插入元素的一端稱為隊尾。將沒有結點的佇列稱為空佇列。佇列中的每個結點包括資料元素本身和指向其後結點的指標。佇列的資料結構包括指向隊頭的指標、指向隊尾的指標和隊中結點的個數。 二.佇列結點的定義 t
環形佇列——對int型別的資料進行操作
#ifndef MYQUEUE_H #define MYQUEUQ_H class MyQueue { public: MyQueue(int queueCapacity); //InitQueue(&Q) 建立佇列 virtual ~MyQueue();
佇列的基本操作——鏈式佇列的類模板定義
定義 佇列(Queue)是隻允許在一端進行插入,而在另一端進行刪除的運算受限的線性表 (1)允許刪除的一端稱為隊頭(Front)。 (2)允許插入的一端稱為隊尾(Rear)。 (
環形佇列的建立以及一些基本的操作
我們的環形佇列長什麼樣子的尼,那幾句話也描述不出來概括不了他的樣子,還是拿一張圖看一下吧 在沒有插入資料時候他也就是長這個樣子了,首位隊外首位指標相交,都在這個初始佇列塊子的位置。 唯一需要注意的一點是我們這裡定義的這個環形佇列的==頭 ==只放了一個指標,我們資料的。
生產者與消費者模型(基於單鏈表、環形佇列、多執行緒、多消費多生產)
#include <pthread.h> #include <unistd.h> #include <stdlib.h> #include <signal.h> #include <semaphore.h> #define SIZE 10 sem_t
自定義控制元件之繪圖篇(四):canvas變換與操作
前言:前幾篇講解了有關canvas繪圖的一些操作,今天更深入一些,講講對畫布的操作,這篇文章不像前幾篇那麼容易理解,如果以前沒有接觸過畫布的童鞋可能比較難以理解,為什麼會這樣。我儘量多畫圖,讓大家更清晰明白。前幾天偶然看到一篇文章,寫的樸實無華,充滿正能量,我非常喜歡裡面的一