1. 程式人生 > >Algorithm——簡單資料結構之佇列和連結串列(十三)

Algorithm——簡單資料結構之佇列和連結串列(十三)

Algorithm——簡單資料結構之佇列和連結串列

佇列是一種先進先出策略,而連結串列中的各元素按線性順序排列。陣列的線性順序是由陣列的下標決定的,但連結串列的順序是由各個物件裡的指標決定的。佇列有入隊和出隊操作,連結串列則有插入、刪除、查詢表中節點的操作。

佇列和雙向連結串列的一種簡單Java實現程式碼如下:

/**
 * 
 * 佇列是一種先進先出策略,有入隊和出隊操作
 * 
 * 通過陣列實現的簡單佇列
 * 
 * @author coder
 *
 */
class Queue {

	private int head = 0;// 對頭位置
	private int tail = 0;// 下一個元素插入的位置

	private int queue[];

	public Queue() {
		queue = new int[256];
	}

	/*
	 * 入隊操作
	 */
	public void enQueue(int x) {
		if (tail >= queue.length)
			throw new IllegalArgumentException("queue overflaw with value: " + x);
		queue[tail] = x;
		tail++;
	}

	/*
	 * 出隊操作
	 */
	public int deQueue() {
		if (head >= tail)
			throw new IllegalAccessError("Queue is empty, can't dequeue");
		int headV = queue[head];
		head++;
		return headV;
	}
}

/**
 * 連結串列可以是單鏈接的,此時省去每個元素中的prev指標; 連結串列可以是已排序的,它的順序與每個節點中關鍵字的線性順序一致;
 * 連結串列可以是未排序的,元素可以以任何順序出現; 同時,連結串列也可以是迴圈的,表頭元素的prev指標指向表尾元素,表尾元素的next指標指向表頭元素
 * 
 * @author coder
 *
 *         一個簡單雙向連結串列的實現
 */
class DoubleLinkedList {

	/**
	 * 連結串列的節點
	 * 
	 * @author coder
	 *
	 */
	class Node {

		int key;// 關鍵字

		Node prev;// 指向前一個節點物件
		Node next;// 指向下一個節點物件

		Node() {
			key = 0;
			prev = new Node();
			next = new Node();
		}
	}

	private Node head = null;// 連結串列的首節點

	/**
	 * 插入節點x到連結串列的前端
	 * 
	 * @param key
	 */
	public void listInsert(Node x) {

		x.next = head;
		if (head != null)
			head.prev = x;
		head = x;
		x.prev = null;
	}

	/**
	 * 搜尋值為key的節點
	 * 
	 * @param key
	 * @return
	 */
	public Node listSearch(int key) {
		Node x = head;
		while (x != null && x.key != key)
			x = x.next;
		return x;
	}

	/**
	 * 刪除節點x
	 * 
	 * @param key
	 * @return
	 */
	public void listDelete(Node x) {
		if (x.prev != null)
			x.prev.next = x.next;
		else
			head = x.next;
		if (x.next != null)
			x.next.prev = x.prev;
	}

}

相關推薦

Algorithm——簡單資料結構佇列連結串列十三

Algorithm——簡單資料結構之佇列和連結串列佇列是一種先進先出策略,而連結串列中的各元素按線性順序排列。陣列的線性順序是由陣列的下標決定的,但連結串列的順序是由各個物件裡的指標決定的。佇列有入隊和出隊操作,連結串列則有插入、刪除、查詢表中節點的操作。佇列和雙向連結串列的

資料結構線性表 -- 連結串列總括

今天來總結一下連結串列。  首先,   什麼是連結串列?     就是採去鏈式儲存結構的線性表,所謂鏈式儲存就好比火車的車廂一樣,一節一節的連線起來,成為一個線性表。這種方式採用動態儲存分配方式,即

資料結構——陣列連結串列

1. 陣列 1.1 陣列為什麼從零編號? 陣列名代表陣列的首地址,陣列的下標其實代表陣列中某個元素相對首地址的偏移量,陣列的第一個元素是零偏移,因此從 0 開始。 上面其實也只是一個解釋, C 語言設計者用零開始編號,後來的各種語言也便紛紛效仿,因此就形成了這個習慣。 1

數碼相框_電子書指標連結串列8

數碼相框_電子書之指標和連結串列(8) 一級指標 int *p    //表示定義一個int型(4位元組)的指標p &p        //表示p自身的地址位置 p       &nbs

資料結構:順序表連結串列簡單操作

用陣列正序初始化連結串列 初始定義 #include <cstdlib> #include <iostream> using namespace std; typedef int ElemType; typedef int Status;

python 資料結構佇列

# 棧是一種特殊的線性表,僅能線上性表的一端操作,棧頂允許操作,棧底不允許操作。 # 棧的特性:後進先出 class Stack(object): """棧""" def __init__(self): self.items=[] def is_empty(s

資料結構:陣列連結串列的區別以及各自的優缺點

原文地址 http://blog.csdn.net/qq_25806863/article/details/70607204 陣列和連結串列是兩種基本的資料結構,他們在記憶體儲存上的表現不一樣,所以也有各自的特點。 大致總結一下特點和區別,拿幾個人一起去看電影時坐座位為例。 陣列的特點

資料結構雙向迴圈連結串列基本操作

#include<stdio.h>#include<malloc.h>#include<stdlib.h>#include<string.h>#define TRUE 1#define OK 1#define FALSE 0#define ERROR 0#def

資料結構二叉樹】B樹、B-樹、B+樹、B*樹介紹,B+樹更適合做檔案索引的原因

     今天看資料庫,書中提到:由於索引是採用 B 樹結構儲存的,所以對應的索引項並不會被刪除,經過一段時間的增刪改操作後,資料庫中就會出現大量的儲存碎片,這和磁碟碎片、記憶體碎片產生原理是類似的,這些儲存碎片不僅佔用了儲存空間,而且降低了資料庫執行的速度。如果發現索引

資料結構頭結點連結串列的三種插入方式頭插法,尾插法,在pos處插入

建立頭結點 流程:首先建立頭結點表指標併為其分配空間——並將頭結點指向空,防止出現段錯誤。 程式碼: //建立頭結點 Node* Create_List () { //建立頭結點 Node* list = (Node*) malloc(

資料結構-棧&佇列&單向連結串列

棧 棧(Stack)是一種先進後出的資料結構。棧對於資料的操作只能從棧頂進行操作,新放入的資料都位於棧頂,也就是第一的位置,以前放入的就會被向下壓,所以資料入棧也叫做壓棧。 出棧的形式與入棧類似,每次都只能獲取棧頂的元素。如我們要取得“200”就必須先取

資料結構:陣列連結串列的區別陣列連結串列的優缺點 & 陣列連結串列的適用場景

陣列和連結串列是兩種基本的資料結構,他們在記憶體儲存上的表現不一樣,所以也有各自的特點 陣列 一、陣列的特點 1.在記憶體中,陣列是一塊連續的區域 2.陣列需要預留空間

資料結構--線性表連結串列的基礎知識

近期準備重新學習一下常用資料結構和基本演算法,並計劃將這些內容的只是做一個整理和歸類,準備慢慢寫一個常用資料結構與基本演算法的系列博文,博文列表參見:常用資料結構與基本演算法博文系列,目前內容還比較少,後續慢慢補充。本文主要內容是介紹 資料結構--線性表和連結串列的基礎知識。 一 線性表概述 1.1

資料結構二叉搜尋樹BST

JavaScript實現二叉搜尋樹(BST) 二叉搜尋樹定義 二叉搜尋樹JavaScript程式碼實現 1. 二叉搜尋樹 二叉查詢樹(英語:Binary Search Tree),也稱為二叉搜尋樹、有序二叉樹(ordered binary tree)或排序二

資料結構二叉樹】B+樹比B樹更適合做檔案索引的原因

 原因:相對於B樹, (1)B+樹空間利用率更高,可減少I/O次數, 一般來說,索引本身也很大,不可能全部儲存在記憶體中,因此索引往往以索引檔案的形式儲存的磁碟上。這樣的話,索引查詢過程中就要產生磁碟I/O消耗。而因為B+樹的內部節點只是作為索引使用,而不像B-樹那樣每個節點都需要儲存硬碟指標。

資料結構學習筆記-迴圈連結串列C語言實現

  迴圈連結串列的概念主要就是讓單鏈表的尾節點的指標不為空並且指向頭節點。像這樣的迴圈連結串列和普通單鏈表除了判斷條件幾乎沒有任何區別,判斷條件就是從p->next是否為空改為p->next是否等於頭節點,如果等於頭節點則迴圈結束。#include <std

linux核心分析--核心中使用的資料結構雜湊表hlist

前言: 1.基本概念: 散列表(Hash table,也叫雜湊表),是根據關鍵碼值(Key value)而直接進行訪問的資料結構。也就是說,它通過把關鍵碼值對映到表中一個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做散列表。 2. 常用的構造雜湊函式的方法

資料結構---自定義單向連結串列Java實現

單向連結串列是指每一個節點記憶體在一個指向下一個節點的指標,java中就是節點存在指向下一個節點的物件引用 下面是Node節點類 public class Node { private Object object; private Node next;

資料結構與演算法』連結串列單鏈表、雙鏈表、環形連結串列

> 微信搜尋:碼農StayUp > 主頁地址:[https://gozhuyinglong.github.io](https://gozhuyinglong.github.io/) > 原始碼分享:[https://github.com/gozhuyinglong/blog-demos](h

資料結構與演算法】——連結串列Linked List

## 連結串列(Linked List)介紹 > 連結串列是有序的列表,但是它在記憶體中是儲存如下: > > ![](http://itfxsen.oss-cn-chengdu.aliyuncs.com/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%