用陣列模擬連結串列
1.什麼是陣列模擬連結串列:
陣列模擬連結串列是一個什麼呢?就是在某索引處儲存下一個索引。下面舉例說明:
不知道大家明白了沒有。如果我上面的陣列定義為a[4],那麼我訪問a[0]時,所獲取的就是下一個位置所對應的索引。也就是我要向訪問a[0]的下一個節點,那麼我只需要訪問a[a[0]],這樣,就獲取了下一個節點處的值。
2.連結串列的操作:
2.1增
把0、3用frist、last進行儲存的話,這樣的話,在對陣列進行操作以後,增加操作我個人感覺也就可以執行了。此時first=0,last=3。
i. 需要new一個比原陣列大1的陣列,然後進行陣列clone。
ii. 需要修改索引為last的值為陣列.length-1(此時為4)
iii. 把新增加的索引處的值改為first(此時為0)
iv. 修改last的值為陣列.length-1
2.2 刪
舉例:刪除索引為1的值所對應的元素(其實不是刪除,這個我感覺很不好)。
i. 獲取索引1處的值:2
ii. 獲取索引2處的值:3
iii. 講1處的值改為
iv. 如果刪除的為last處的值,需要將last改為值為last處的索引,例如刪除4,那麼last需要改為值為4處的索引:3.
v. 如果刪除的為first處的值,那麼將first改為索引first處的值,例如刪除0,那麼first需要改為索引0處的值:1
這樣,就沒有了指向2處的元素,這個元素也就被“刪”掉了。
2.3 其他操作
其他操作需要很強的依賴陣列操作,有興趣可以自己研究一下,由於這次我做的例子用到的不多,我也就不再一一列舉了。
3 C語言結構體陣列實現連結串列
#include<stdio.h>
#include<stdlib.h>
#define K 4
void main(){
struct array{
int data;
int index;
};
struct array arr[10]={{'a',1},{'b',2},{'c',3},{'d',4},{'e',5},{'f',6},{'g',7},{'h',8},{0,0},{0,0}};
int pos=0;
//K=5;
arr[sizeof(arr)-1].data='k';
arr[K].index=sizeof(arr)-1;
arr[sizeof(arr)-1].index=K+1;
while(arr[pos].data != 0){
printf("%c",arr[pos].data);
pos=arr[pos].index;
printf("\n");
}
}
簡單實現便於理解陣列的操作過程。
相關推薦
用陣列模擬連結串列
1.什麼是陣列模擬連結串列: 陣列模擬連結串列是一個什麼呢?就是在某索引處儲存下一個索引。下面舉例說明: 不知道大家明白了沒有。如果我上面的陣列定義為a[4],那麼我訪問a[0]時,所獲取的就是下一個位置所對應的索引
P1160 佇列安排(陣列模擬連結串列)
題目描述 一個學校里老師要將班上N個同學排成一列,同學被編號為1~N,他採取如下的方法: 1.先將1號同學安排進佇列,這時佇列中只有他一個人; 2.2~N號同學依次入列,編號為i的同學入列方式為:老師指定編號為i的同學站在編號為1~i -1中某位同學(即之前已經
用陣列和連結串列實現棧
完成一個棧總共需要完成以下操作:初始化入棧出棧檢視棧頂元素檢視棧的容量清空棧。首先是簡單的,用陣列做的,會有越界的可能。#include <stdio.h> #include <stdlib.h> typedef struct Stack {
陣列模擬連結串列來實現鄰接表結構
void insert(int u, int v) { e[eid].v = v; e[eid].next = p[u]; p[u] = eid++; } 以上是核心程式碼。。 下面舉一個例子::: 這字真好看(qing
用陣列和連結串列兩種方式實現佇列
手寫陣列實現佇列 1 int queue[20]; 2 int front,rear; 3 4 void clear() 5 { 6 front = rear = -1; 7 } 8 9 int size() 10 { 11 return (rear-front)
josephus Problem 中級(使用陣列模擬連結串列,提升效率)
問題描述: 在《josephus Problem 初級(使用陣列)》中,我們提出了一種最簡單直接的解決方案。 但是,仔細審視程式碼之後,發現此種方案的效率並不高,具體體現在,當有人出局時,遍歷陣列仍需要對其進行判斷, 這無疑做了無用功,降低了程式碼效率,在人數多時尤其明顯。
UVA11988 Broken Keyboard (a.k.a. Beiju Text)【陣列模擬連結串列】
Broken Keyboard (a.k.a. Beiju Text) You're typing a long text with a broken keyboard. Well it's not
用陣列和連結串列分別實現棧類stack,隊queue
棧(stack)是一種常見資料結構,以後進先出(LIFO)著稱。比如編譯器用棧處理函式呼叫,儲存被呼叫函式的引數和區域性變數。當一個函式呼叫另一個函式時候,新的函式引數和區域性變數被入棧。呼叫結束,佔用的資源從棧釋放。 用陣列實現: class vector{ priva
c++分別用陣列和連結串列實現棧的操作
棧在實際程式設計中經常會用到,本文利用陣列和連結串列分別實現了棧的操作。 1.陣列方式實現如下: #include<iostream> using namespace std; template <class T> class arraysta
陣列模擬連結串列運作!!L2-002. 連結串列去重
給定一個帶整數鍵值的單鏈表L,本題要求你編寫程式,刪除那些鍵值的絕對值有重複的結點。即對任意鍵值K,只有鍵值或其絕對值等於K的第一個結點可以被保留。同時,所有被刪除的結點必須被儲存在另外一個連結串列中。例如:另L為21→-15→-15→-7→15,則你必須輸出去重後的連結串
UVA11988(破損鍵盤) 使用陣列模擬連結串列插入
開始刷資料結構相關的題了,在筆試和麵試過程中如果要寫出指標形式的連結串列時間上可能不夠。該題很好地訓練了怎麼使用陣列來模擬連結串列 破損的鍵盤(又名:悲劇文字)(Broken Keyboard(a.k.a. Beiju Text), UVa 1198
分別用陣列和連結串列實現堆
為了更好的理解棧的原理,本文分別用陣列和連結串列實現了棧, 1 陣列實現棧: /* @ brife:陣列實現棧類 */ #include <Windows.h> #ifndef ARRAYSTACK_H #define ARRAYST
用陣列實現連結串列的好處
一般傳統連結串列的物理結構,是由指標把一個一個的節點相互連線而成: 1 2 3 4 5 6 struct node { DataType data; node* previous; node*
陣列、連結串列和樹的演進
我們最常用的資料結構就是樹,最基礎的資料結構是陣列,那麼樹在陣列的基礎上解決了什麼問題?為什麼用樹而不用陣列?下面我們來詳細的剖析一下: 上面的圖是陣列、連結串列和樹的示意圖,可以看到,陣列中的元素沒有指標,單向連結串列有一個指標,雙向連結串列有兩個指標,它們都是表示的順序關係,也就是
陣列和連結串列與棧和佇列之間的關係及堆和棧之間的關係
本屌最近在學習資料結構過程中,由於連續看了陣列,棧,佇列,連結串列等,一時混雜,下面摘取參考資料,供自己學習使用。 第一部分:介紹了資料儲存結構和資料結構的區別,以及連結串列和陣列的差異。 第二部分:介紹了堆和棧的區別。 (1)資料儲存結構:計算機的一個概念,描述資料在計算機中儲存方式;常用
線性結構 陣列與連結串列
線性結構 陣列與連結串列 線性結構 線性資料結構有兩端,有時被稱為左右,某些情況被稱為前後。你也可以稱為頂部和底部,名字都不重要。將兩個線性資料結構區分開的方法是新增和移除項的方式,特別是新增和移除項的位置。例如一些結構允許從一端新增項,另一些允許從另一端移除項。 陣列或列表 陣列(Array)是程式
用Javascript實現連結串列
github主頁:https://github.com/A15162252289 什麼是連結串列 連結串列儲存有序的元素集合,但不同於陣列,連結串列中的元素在記憶體中不是連續放置的。每個元素由一個儲存元素本身的節點和指向下一個元素的引用組成。 下圖為單向連結串列的示意圖 相對於傳統
演算法總結-陣列和連結串列
1 連結串列 Dummy Node的應用 K組翻轉連結串列 http://www.lintcode.com/zh-cn/problem/reverse-nodes-in-k-group/ 連結串列劃分 http://www.lintcode.com/zh-cn/probl
資料結構之——陣列和連結串列
1. 陣列 1.1 陣列為什麼從零編號? 陣列名代表陣列的首地址,陣列的下標其實代表陣列中某個元素相對首地址的偏移量,陣列的第一個元素是零偏移,因此從 0 開始。 上面其實也只是一個解釋, C 語言設計者用零開始編號,後來的各種語言也便紛紛效仿,因此就形成了這個習慣。 1
劍指offer系列——表示數值的字串,字元流中第一個不重複的陣列,連結串列中環的入口結點
表示數值的字串 題目描述 請實現一個函式用來判斷字串是否表示數值(包括整數和小數)。例如,字串"+100","5e2","-123","3.1416"和"-1E-16"都表示數值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。 解題思路: