佇列的入隊、出隊基本操作
佇列
先進先出的線性表(FIFO)
隊尾:佇列中指定了用來插入資料的一端
隊頭:佇列中指定了用來刪除資料的一端
入隊:資料的插入動作
出隊:資料的刪除動作
1.順序佇列
//順序佇列
#define QUEUESIZE 64
typedef struct _sequ
{
dataType data[QUEUESIZE];
int front;
int rear;
}SeQueue,*pSeQueue;
//順序佇列
pSeQueue SeQueueCreat()
{
pSeQueue p = (pSeQueue)malloc(sizeof(SeQueue));
if (NULL == p)
{
perror("SeQueueCreat malloc");
return NULL;
}
memset(p,0,sizeof(SeQueue));
p->front = -1;
p->rear = -1;
return p;
}
//入隊
int SeQueueEnter(pSeQueue Q,dataType data)
{
Q->rear++;
if(Q->rear > QUEUESIZE)
return -1;
Q->data[Q->rear] = data;
return 0;
}
//出隊
int SeQueueExit(pSeQueue Q,dataType *data)
{
if(Q->front == Q->rear)
return -1;
Q->front++;
*data = Q->data[Q->front];
return 0;
}
//釋放
int SeQueueFree(pSeQueue Q)
{
free(Q);
return 0;
}
//列印佇列
int printSeQueue(pSeQueue Q)
{
int i = 0;
for(i = Q->front + 1 ;i <= Q->rear;i++)
{
printf("%4d ",Q->data[i]);
}
printf("\r\n");
return i;
}
2.鏈式佇列
一個鏈式佇列需要兩個分別指示隊頭和隊尾的指標(頭指標和尾指標),才能唯一確定
當頭指標和尾指標均指向頭結點則表示為空的鏈佇列
以下是鏈式佇列的建立、入隊、出隊操作的C語言程式碼
//鏈式佇列
typedef int QueuedataType;
//typedef BinTree QueuedataType;//在後邊二叉樹時使用
typedef struct _qlnode
{
QueuedataType data;
struct _qlnode * next;
}QueueNode,*pQueueNode;
typedef struct
{
pQueueNode front;
pQueueNode rear;
int count ;
}LinkQueue,*pLinkQueue;
//建立結點
pQueueNode LinkQueueCreatNode(QueuedataType data)
{
pQueueNode s = (pQueueNode)malloc(sizeof(QueueNode));
if(NULL == s)
{
perror("LinkQueueCreatNode malloc");
return NULL;
}
s->data = data;
s->next = NULL;
return s;
}
//建立佇列
pLinkQueue LinkQueueCreat()
{
pLinkQueue q = (pLinkQueue)malloc(sizeof(LinkQueue));//建立佇列的隊頭隊尾
if(NULL == q)
{
perror("LinkQueueCreat malloc");
return NULL;
}
pQueueNode s = (pQueueNode)malloc(sizeof(QueueNode));//建立頭結點
if(NULL == s)
{
perror("LinkQueueCreatNode malloc");
free(q);
return NULL;
}
s->next = NULL;
q->front = q->rear = s;//接入頭結點,並把隊頭隊尾指標指向該結點
q->count = 0;
return q;
}
//入隊
int LinkQueueEnter(pLinkQueue Q,QueuedataType* data)
{
pQueueNode p = LinkQueueCreatNode(*data);
if(NULL == p)
{
perror("LinkQueueCreatNode");
return -1;
}
Q->rear->next = p; //當前隊尾指標域指向新結點
Q->rear = p; //新結點變為隊尾
Q->count++;
}
//出隊
int LinkQueueExit(pLinkQueue Q,QueuedataType *data)
{
if(Q->front == Q->rear)
return -1;
pQueueNode p = Q->front->next; //指向頭結點的下一個結點
*data = p->data;
Q->front->next = p->next; //頭結點的下一跳指向出隊結點的下一個結點
if(Q->rear == p) //若隊頭是隊尾,則刪除後將rear指向頭結點
Q->rear = Q->front;
Q->count--;
free(p);
return 0;
}
//釋放
int LinkQueueFree(pLinkQueue Q)
{
free(Q);
return 0;
}
//列印佇列
int printLinkQueue(pLinkQueue Q)
{
int i = 0;
pQueueNode p = Q->front->next;
for(i = 0;i < Q->count;i++)
{
printf("%4d ",p->data);
p = p->next;
}
printf("\r\n");
return i;
}
int main()
{
//順序佇列
pSeQueue s_Queue = SeQueueCreat();
int m_data = 0;
if(NULL == s_Queue)
{
perror("SeQueueCreat");
return -1;
}
for(int i = 0;i < 10;i++)
SeQueueEnter(s_Queue,i + 60);
printSeQueue(s_Queue);
SeQueueExit(s_Queue,&m_data);
printf("data:%d\n",m_data);
printSeQueue(s_Queue);
SeQueueFree(s_Queue);
//鏈式佇列
pLinkQueue s_lQueue = LinkQueueCreat();
int m_data = 0;
if(NULL == s_lQueue)
{
perror("SeQueueCreat");
return -1;
}
for(int i = 0;i < 10;i++)
LinkQueueEnter(s_lQueue, i);
printLinkQueue(s_lQueue);
LinkQueueExit(s_lQueue,&m_data);
printf("data:%d\n",m_data);
printLinkQueue(s_lQueue);
LinkQueueFree(s_lQueue);
}
相關推薦
佇列的入隊、出隊基本操作
佇列 先進先出的線性表(FIFO) 隊尾:佇列中指定了用來插入資料的一端 隊頭:佇列中指定了用來刪除資料的一端 入隊:資料的插入動作 出隊:資料的刪除動作 1.順序佇列 //順序佇列 #define QUEUESIZE 64 typedef
C語言實現順序佇列的初始化、入隊、出隊等操作(三)
佇列是一種只能在隊頭刪除、隊尾插入的線性表,本文實現佇列的順序結構,使用一個結構體包含隊頭指標、隊尾指標、佇列的長度這三個成員。通過malloc函式為佇列開闢一片記憶體,大小為100個單位(100*資料型別所佔位元組),將隊頭指標指向起始地址,隊尾指標也指向起始地址。佇列的
順序佇列基本操作的實現----入隊、出隊、列印
以順序儲存結構對佇列進行操作----入隊、出隊、列印並判斷佇列現有長度(以類的形式) 程式如下: queue.h 標頭檔案 #pragma once #include <iostream> class queue { private: int *dat
採用順序儲存實現迴圈佇列的初始化、入隊、出隊操作。
//////////////////////下面為迴圈佇列 #include<stdio.h> #include<stdlib.h> #define OVERFLOW -2 #define MAXQSIZE 100 /*佇列的最大長度*/ ty
【C++】容器介面卡實現佇列Queue的各種功能(入隊、出隊、判空、大小、訪問所有元素等)
介面卡:將一個通用的容器轉換為另外的容器,所謂的容器,指的是存放資料的器具,像我們知道的順序表和連結串列都是容器Container。舉個例子解釋一下吧,我們的電壓都是220v,而像充電線就起到轉換到合適的電壓的作用。而這裡,我們的主角就是將通用的連結串列結構轉換為來實現佇列Q
Java實現環形佇列(入隊、出隊)
public class Class_queue { private int q_head; private int q_tail; private int[] queue; private int len; private int
資料結構必須掌握內容佇列--入隊,出隊
棧的壓棧出棧的順序是: 先進後出 ; 但是佇列的入隊和出隊是:先進先出。 我上一篇實現了棧的壓棧出棧,這次實現的佇列的先進先出,廢話不多說,附上程式碼和執行結果: #include"stdafx.h"
建立一個順序佇列,實現佇列的入隊和出隊操作。
標頭檔案: #ifndef seqqueue_H #define seqqueue_H const int queuesize=10; class seqqueue { int rear,front; int data[queuesize]; public: seqqueue(){front
鏈佇列的簡單操作(入隊,出隊,輸出隊元素等)
定義一個節點,裡面包含元素型別,指向下一個節點的指標。然後定義一個結構體,裡面兩個指標,指向隊頭和隊尾 typedef struct QNode { int data; struct QNode * next; }QNode, * Queue; typedef s
03: 數據導入導出 、 表記錄基本操作 、 查詢及匹配條件 、 多表查詢
ins 3.5 添加 add class 文件名 tween 數值 平均值 day03一數據導入二數據導出三管理表記錄 *3.1 插入表記錄3.2 查詢表記錄 (單表 多表 嵌套 連接)3.3 條件匹配3.4 更新表記錄字段的值3.5 刪除表記錄++++++
ActiveMQ發訊息、收訊息、持久化,查詢佇列剩餘訊息數、出隊數的實現
1.首先啟動activeMQ的服務 public class RunServer { /** 啟動activeMQ服務&
C語言 ,單鏈表實現佇列(初始化,入隊,出隊,元素個數,隊首元素,是否為空)
單鏈表實現佇列: 連結串列為空的判斷條件:pQueue->pFront==pQueue->pRear或者若結構體中存在數的個數時,判斷pQueue->size==0,即元素個數為0 標頭檔案:佇列.h #pragma once #include<
連結串列初解(四)——佇列的入隊和出隊
自己複習了一下簡單佇列的基本操作,其中要注意的是隊頭和隊尾要始終保持位置正確~還是老習慣,上程式碼+註釋啦~ Code: #include<iostream> using namespace std; typedef struct node { int da
4-4 Shift Down如何從堆中取出一個元素(對應優先佇列中出隊這個操作)
Shift Down 的具體操作步驟 只能取出根節點處的元素,即第 1 個元素(索引為 1)。 步驟:將最後一個元素放到第1個元素的位置,這樣做交換和移動的次數最少,並且保持了完全二叉樹的性質,但是此時並不滿足最大堆的性質。(想清楚為什麼要這麼做) 保持了
鏈佇列的初始化,入隊,出隊,計算隊的長度,遍歷鏈隊銷燬佇列
#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),允許刪除的一
隊的定義、入隊和出隊
隊是限定在表的一端進行插入另一端進行刪除的線性表。 特點:先進先出(FIFO),後進後出(LILO)。 包含順序隊和鏈隊: 順序隊:front=rear=0表示隊空,入隊rear+1,出隊:front+1;順序隊的容量定義為M。 但是當front=rear=M時,會導致假溢
2、hive的基本操作
like -s txt code del class ext data 數據 1、創建表 hive>CREATE TABLE userTables(id INT,name STRING); 或者 hive> CREATE TABLE userTabl
linux文件層級、目錄、文件基本操作介紹
文件、目錄基本操作1、文件層級FHS介紹: Filesystem Hierarchy Standard(文件系統層次化標準)的縮寫,多數Linux版本采用這種文件組織形式,類似於Windows操作系統中c盤的文件目錄,FHS采用樹形結構組織文件。 FHS定義了系統中每個區域的用途
Hadoop — HDFS的概念、原理及基本操作
IE 觀察 poi 如何恢復 滾動 4.3 python metadata 元數據 1. HDFS的基本概念和特性 設計思想——分而治之:將大文件、大批量文件分布式存放在大量服務器上,以便於采取分而治之的方式對海量數據進行運算分析。在大數據系統中作用:為各類分布式運算框架(