1. 程式人生 > >資料結構之鏈式佇列

資料結構之鏈式佇列

上一篇我們講了,順序佇列,那我們如何用連結串列實現一個佇列呢。
下面來看

#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<stddef.h>
#define HEADER printf("\n==========%s==========\n",__FUCTION__)
typedef char linkqueuetype;
typedef struct linkqueuenode{
    linkqueuetype data;
    struct linkqueuenode *next;
}linkqueuenode;

typedef
struct linkqueue{//為了方便取連結串列頭和尾的元素,定義一個頭指標,一個尾指標。 linkqueuenode *head; linkqueuenode *tail; }linkqueue; void linkqueue_init(linkqueue *q); void linkqueue_print(linkqueue *q); void linkqueue_push(linkqueue *q,linkqueuetype value); void linkqueue_pop(linkqueue *q); int linkqueue_gettop(linkqueue *q,linkqueuetype *value);

下面我們看下具體的程式碼實現

#include"linkqueue.h"
void linkqueue_init(linkqueue *q)
{
    if(q == NULL)
    {
        return;
    }
    q->head = q->tail =(linkqueuenode*)malloc(sizeof(linkqueuenode));
    //申請一個頭結點,不關心它的數值
    if(q->head == NULL)
    {
        return;//申請失敗
    }
    q->head->next =
NULL; return; } void linkqueue_print(linkqueue *q) { if(*q = NULL) { return; } if(q->head->next = NULL) { return; } linkqueuenode *cur = q->head->next; while(cur != NULL) { printf("[%c] ",cur->data); cur = cur->next; } printf("\n"); } void linkqueue_push(linkqueue *q,linkqueuetype value) { if(q == NULL) { return; } linkqueuenode *newnode = (linkqueuenode *)malloc(sizeof(linkqueuenode)); newnode->data = value; newnode->next = NULL; linkqueuenode *cur = q->tail; cur->next = newnode; q->tail = newnode; } void linkqueue_pop(linkqueue *q) { if(q == NULL) { return; } if(q->head->next == NULL) { return; } linkqueuenode *cur = q->head; linkqueuenode *todelet = cur->head->next cur->next = todelet->next; free(todelet); todelet = NULL; } int linkqueue_gettop(linkqueue *q,linkqueuetype *value) { if(q == NULL||value == NULL) { return -1; } if(q->head->next == NULL) { return 0; } *value = q->head->next->data; return 1; }

下面就是測試函式 和實現的效果
這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

如有錯誤請指出,謝謝

相關推薦

C++資料結構佇列模版實現

鏈佇列的儲存結構   將對頭指標front指向鏈佇列的頭結點(頭節點為空,不存資料),隊尾指標rear指向終端結點。元素從隊尾進入,隊首出列。 元素為空時,隊尾指標指向隊頭指標。 鏈式佇列模版實現: 功能: 1 建立 2 遍歷 4 入隊,出隊 5 獲取

資料結構佇列

上一篇我們講了,順序佇列,那我們如何用連結串列實現一個佇列呢。 下面來看 #pragma once #include<stdio.h> #include<stdlib.h> #include<stddef.h> #de

資料結構 佇列C/C++

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

資料結構

        繼順序表之後,我們需要討論一下資料結構的鏈式表。順序表的特點是邏輯上相鄰的元素在物理位置上也相鄰,通常我們用陣列來表示這種儲存結構,這種儲存結構簡單,易於理解。但是同時必須看到它的缺點,那就是在作 插入和刪除操作時,需要移動大量的資料 ,這

資料結構表的實現--單鏈表(C語言)

學習參考: 嚴蔚敏: 《資料結構-C語言版》 基本操作: 單鏈表的建立 新增結點(頭插法) 新增結點(尾插法) 單鏈表的輸出 單鏈表的修改 單鏈表的插入 單鏈表的刪除 單鏈表按

資料結構表的實現--單向迴圈連結串列(C語言)

 學習參考: 嚴蔚敏: 《資料結構-C語言版》 單向迴圈連結串列的基本操作 單向迴圈連結串列的建立 單向迴圈連結串列新增結點(頭插法) 單向迴圈連結串列新增結點(尾插法) 單向迴圈連結串列

資料結構

#include<stdio.h> #include<stdlib.h> typedef int Elemtype; typedef struct node        //定義結點 {     Elemtype data;     struct n

C++資料結構 13佇列

先進先出 #ifndef _QueenList_H__ #define _QueenList_H__ template <class T> class Queue{ public:

資料結構-棧及其常見應用(進位制轉換、括號匹配、行編輯程式、表示式求值等)

1、棧的概念 棧(stack)又名堆疊,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。向一個棧插入新元素又稱作進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從一個棧刪除元素又稱作出棧或退棧,它是把棧

資料結構棧的一些基本操作

鏈式棧是一種資料儲存結構,可以通過單鏈表的方式來實現,使用鏈式棧的優點在於它能夠克服用陣列實現的順序棧空間利用率不高的特點,但是需要為每個棧元素分配額外的指標空間用來存放指標域。 標頭檔案 LinkS

資料結構C語言實現佇列的6種演算法程式碼

#include <stdio.h>#include <stdlib.h>typedef int elemType;/************************************************************************//* 以下是關於佇列連

數據結構隊列(C實現)

num 返回 創建 位置 刪除 () temp 結點 pan linkqueue.h #ifndef LINKQUEUE_H #define LINKQUEUE_H #include <stdio.h> #include <malloc.h>

Python資料結構: 棧與佇列

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

資料結構三——儲存結構

●   鏈式儲存結構     特點:用一組任意的儲存單元儲存線性表的資料元素,可以連續也可以不連續,不僅含有資料元素還要有前驅、後繼元素的地址。               &nbs

資料結構雙端佇列(Deque)

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

資料結構前向星】

第一次接觸鏈式前向星是在學習圖論的迪傑斯特拉演算法時,大佬們紛紛用鏈式前向星+堆優化+迪傑斯特拉解題,秀的我萌新懵的一批,當時不知道啥是鏈式前向星,不過隨著越來越深入,這種結構見得越來越多,慢慢的就明白了。 在儲存一個圖時,我們經常用的應該是矩陣,不過他比較浪費空間,尤其是稀疏圖,點又多,空間經

資料結構棧和佇列

棧和佇列是兩種重要的線性結構。從資料結構角度來看,棧和佇列也是線性表,它們是操作受限的線性表,被稱為限定性的資料結構。 棧(Stack) 棧是限定僅在表尾進行插入或刪除操作的線性表。 表尾端被稱為棧頂(top),表頭端稱為棧底(bottom),不含元素的空表稱為空棧。

PTA-資料結構線性表的倒數第K項

7-24 求鏈式線性表的倒數第K項 (20 分) 給定一系列正整數,請設計一個儘可能高效的演算法,查詢倒數第K個位置上的數字。 輸入格式: 輸入首先給出一個正整數K,隨後是若干正整數,最後以一個負整數表示結尾(該負數不算在序列內,不要處理)。 輸出格式: 輸出倒數第

資料結構棧的實現(C語言)

棧的鏈式儲存稱為鏈式棧,鏈式棧是一種特殊的單鏈表,它的插入和刪除規定在單鏈表的同一端進行。鏈式棧的棧頂指標一般用top表示。(個人理解:相當於只對單鏈表的第一個結點進行操作) 鏈式棧要掌握以下基本操作: 1、建立一個空鏈式棧 2、判斷鏈式棧是否為空 3、讀鏈式棧的

python資料結構棧和佇列

1.功能實現 之前文章有,可以點開看看 棧 佇列 2.應用(1)括號匹配及字尾表示式 class Solution(object): def isValid(self, s): """ :type s: str :rtype