1. 程式人生 > >佇列的入隊、出隊基本操作

佇列的入隊、出隊基本操作

佇列

先進先出的線性表(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時,會導致假溢

2hive的基本操作

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的基本概念和特性 設計思想——分而治之:將大文件、大批量文件分布式存放在大量服務器上,以便於采取分而治之的方式對海量數據進行運算分析。在大數據系統中作用:為各類分布式運算框架(