1. 程式人生 > >連結串列初解(四)——佇列的入隊和出隊

連結串列初解(四)——佇列的入隊和出隊

自己複習了一下簡單佇列的基本操作,其中要注意的是隊頭和隊尾要始終保持位置正確~還是老習慣,上程式碼+註釋啦~

Code:

#include<iostream>
using namespace std;

typedef struct node
{
	int data;
	struct node *next;
}node;//定義指標結構

typedef struct queue
{
	node *first, *rear;//定義隊頭、隊尾指標。
}queue;
//入隊
queue *insert(queue *Q, int x)
{
	node *i;
	//先建立要入隊的節點。
	i = (node *)malloc(sizeof(node));
	i->data = x;
	if(Q == NULL)
	{//如果佇列結構體為空(還未插入值),則建立佇列結構體。
		Q = (queue *)malloc(sizeof(queue));
		Q->first = Q->rear = i;
		Q->rear->next = NULL;
	}
	else
	{//按順序將節點入隊。
		Q->rear->next = i;
		Q->rear = i;
		i->next = NULL;
	}
	return Q;
}
//出隊
queue *del(queue *Q)
{
	node *temp;	//先定義一箇中間節點,以便將隊頭處理完後將原隊頭空間釋放。
	if(Q->first == NULL)
	{//如果佇列唯空,則報錯退出。
		printf("Queue is null !");
		return NULL;
	}
	else
	{//和單鏈表刪除頭節點的處理一樣
		temp = Q->first;
		Q->first = Q->first->next;
		free(temp);//別忘了釋放哦~
	}
	return Q;
}
//列印佇列
void print(queue *Q)
{//與單鏈表的處理一樣
	node *temp;
	temp = Q->first;
	printf("Output the Queue : ");
	while(1)
	{
		if(temp == NULL) break;
		if(temp != Q->rear) printf("%d<-", temp->data);
		else printf("%d\n", temp->data);
		temp = temp->next;
	}
}
int main()
{
	queue *Q = NULL;
	int x;
	printf("Insert Queue (end with 0) : ");
	//插入佇列
	while(scanf("%d", &x) != EOF && x != 0)
	{
		Q = insert(Q, x);
	}
	print(Q);
	//出隊
	printf("\nAfter deleting~\n");
	Q = del(Q);
	print(Q);
	printf("\n");
	return 0;
}

執行示例:


Ps:僅供參考哈~

相關推薦

連結串列初解——佇列入隊

自己複習了一下簡單佇列的基本操作,其中要注意的是隊頭和隊尾要始終保持位置正確~還是老習慣,上程式碼+註釋啦~ Code: #include<iostream> using namespace std; typedef struct node { int da

程式設計師程式碼面試指南 —— 連結串列問題

題目:將單鏈表的每K個節點之間逆序 描述:給定一個單鏈表的頭結點head,實現一個調整單鏈表的函式,使得每K個節點之間逆序,如果最後不夠K個節點一組,則不調整最後幾個節點 例如: 連結串列 1—>2—>3—>4—>5—>6—>7—>8—>nul

連結串列初解——單鏈表的建立、刪除、插入、測長、排序、逆置

由於考試需要,複習一下單鏈表的各種常見操作,直接上程式碼+註釋,需要的可以參考下哈~ Code: #include<iostream> using namespace std; typedef struct student { int data; str

資料結構佇列

一、基本概念 1、特點: 在佇列頭部進行刪除,在佇列的尾部進行插入操作 2、主要實現: 使用迴圈陣列 使用連結串列 3、關係圖: 二、Queue public interface Queue<E> extends

資料結構與演算法之連結串列

連結串列作為一種基礎的資料結構之一,我們會常常使用到它,接下來就讓我們一起學習吧。 1、連結串列的經典應用場景: LRU快取淘汰演算法。 2、快取是一種提高資料讀取效能的技術,在硬體設計、軟體開發中都有著非常廣泛的應用,比如常見的CPU快取、資料庫快取、瀏覽器快取等等。

資料結構與演算法之連結串列

Q:如何輕鬆寫出正確的連結串列程式碼? 總結起來,就是投入時間+技巧; 一、投入時間:          只要願意投入時間,大多數人都是可以學會的,比如說,如果你真能花上一個週末或者一整天時間,就去寫連結

程式設計師程式碼面試指南 —— 連結串列問題

題目:複製含有隨機指標節點的連結串列 描述:有一種連結串列節點類描述如下: public class Node { public int value; public Node next; public Node rand; public Node(int data){ this.value

程式設計師程式碼面試指南 —— 連結串列問題

題目:給定一個連結串列的頭節點head,請你判斷是否為迴文結構 例如:1 —> 2 —> 1 ture 1 —> 2 —> 2 —> 1 true 1 —> 2 —> 3 flase 思路:可以使用棧這種資料結構,可以將整個單向連結串列分為前半區和後

程式設計師程式碼面試指南 —— 連結串列問題

注:題目來自於《程式設計師程式碼面試指南:IT名企演算法與資料結構題目最優解》,該書是左程雲老師的著作,值得推薦,這裡僅是記錄一下該書中題目的解法和個人理解 題目一:在單鏈表和雙鏈表中刪除倒數第K個節點 描述:   分別實現兩個函式,一個可以刪除單鏈表中倒數第K個節點,另一個可以刪除雙鏈

C語言 ,單鏈表實現佇列初始化,入隊,元素個數,首元素,是否為空

單鏈表實現佇列: 連結串列為空的判斷條件:pQueue->pFront==pQueue->pRear或者若結構體中存在數的個數時,判斷pQueue->size==0,即元素個數為0 標頭檔案:佇列.h #pragma once #include<

單向連結串列反轉倒置問題

今天遇到單向連結串列的反轉的問題,於是靜下心來好好想了一番。 解題思路如下圖: 假設當前建立好的連結串列如下: 首先讓頭節點與第一個元素節點斷開,但是要注意在斷開之前需要用p指標指向第一個元素節點來儲存第一個元素節點的位置,然後再斷開。在這裡有一個指標

面向物件之Python的連結串列實現迴圈連結串列

接上一章的練習,這裡接著實現單鏈表的變型——傳說中的迴圈單鏈表。給出一個簡單的類,構造4個功能並例項化測試。 在下一篇文章中將會關注一個比較tricky的問題:如何判斷連結串列有環?以及求出環長度 # -*- coding: utf-8 -*- """ Created

靜態記憶體分配-連結串列管理1單向量表講解

單向連結串列 單向量表有頭節點 和節點組成,頭節點主要是管理連結串列使用,節點組成資料。 資料結構 **last指向尾節點的Next指標,在節點尾部插入節點時,直接調整頭節點的last內容的指向即可在尾部插入。first指標指向連結串列的首節點。

連結串列求和LintCode

題目來源:LintCode 原題地址:http://www.lintcode.com/zh-cn/problem/add-two-numbers/ 題目: 你有兩個用連結串列代表的整數,其中每

程式設計練習:連結串列習題

(1)題目:輸入兩個連結串列,找出它們的第一個公共節點。 思路: 1)計算出連結串列1的長度; 2)計算出連結串列2的長度; 3)計算出連結串列1和連結串列2的長度差dif;

在O(1)時間複雜度刪除連結串列節點372

資料結構—線性結構—連結串列:(在O(1)時間複雜度刪除連結串列節點)一、題目:給定一個單鏈表中的一個等待被刪除的節點(非表頭或表尾)。請在在O(1)時間複雜度刪除該連結串列節點。樣例:Linked l

連結串列學習3

1、線性結構與非線性結構,主要看元素之間的關係。若是一對一關係就是線性表,如果不是一對一就是非線性。 2、LS=((a,b,c),(d,e,f)); tail(LS)=((d,e,f)); head

1建立二叉樹的二叉連結串列2對用二叉連結串列儲存的二叉樹進行先序、中序後序遍歷的遞迴非遞迴演算法。 3對用二叉連結串列儲存的二叉樹進行層次遍歷演算法。 4求二叉樹的所有葉子及結點總數。

(1)建立二叉樹的二叉連結串列。 (2)寫出對用二叉連結串列儲存的二叉樹進行先序、中序和後序遍歷的遞迴和非遞迴演算法。 (3)寫出對用二叉連結串列儲存的二叉樹進行層次遍歷演算法。(4)求二叉樹的所有葉子及結點總數。 include<stdio.h> #inclu

soapui接口性能測試---- 輸出報告統計

color table repo line src testin edi set diag 好的,您已經運行了LoadTest,現在需要創建一些報告或導出收集的數據以進行更詳細的分析。有幾個選項可供您使用,我們將按順序查看:導出統計表的數據(僅限開源)。從統計圖導出數據。在

Spring入門— 整合StrutsHibernate

patch pan area src 選擇 roo 們的 void prototype 一、Spring整合Struts 1. 初步整合 只要在項目裏面體現spring和 strut即可,不做任何的優化。 struts 環境搭建 創建action publ