基礎知識 陣列 棧 佇列的靜態 動態和鏈式實現

2021-07-09 05:42:21 字數 2955 閱讀 3932

線性表

線性表的定義:線性表是

n(n≥0)

個元素的有限序列,當

n=0,則稱為空表;當

n>0

時,線性表通常表示為(

a1 ,

a2 ,...,

an),其中

a1無前驅,

an無後繼,其餘結點有且只有乙個前驅和乙個後繼。

線性表的儲存:線性表有順序儲存和鏈式儲存兩種儲存結構。

線性表的操作:主要操作有初始化表、判表空、求表長、查詢、插入和刪除元素等。線性表的儲存結構不同,具體的操作實現就不同,如表

2-2所示。

表2-2 

線性表的兩種儲存結構的基本操作特點

順序儲存結構

鏈式儲存結構

靜態陣列

動態陣列 類

型 定 義

#define

arsize

10 typedef struct sqlist;

typedef struct sqlist;

typedef struct node

lnode; 初

始 化 表

void initlist(sqlist *l)

void initlist(sqlist *l, int n)

lnode *initlk( )

查 找由於第

i個元素

ai的儲存位置

loc(ai)=loc(a1)+(i-1)×d

,所以能隨機查詢任乙個元素,時間複雜度為

o(1)

只能進行順序查詢,查詢乙個元素平均比較次數為

(n+1)/2 插

入 刪 除

插入、刪除時大量結點要移動,在等概率下插入、刪除乙個元素平均移動結點的次數分別是

n/2和

(n-1)/2。

插入、刪除時只要修改相關的指標即可,時間複雜度都為

o(1)

棧3.1 棧

棧的定義

:棧是一種只能在表的某一端(首端)進行操作的線性資料結構。棧的操作主要有進棧和出棧,因為只能在某一端進棧出棧,所以必定是先進後出的(

filo

或lifo)。

棧的儲存結構:有順序棧(靜態陣列或動態陣列)和鏈棧。

棧的操作:初始化棧、進棧、出棧,通過棧頂指標(top)來操作如表2-3所示。

表2-3 

順序棧和鏈棧的操作

靜態陣列棧

動態陣列棧 鏈棧

型別定義

#define ssize 10

typedef struct sqsnode;

typedef structdsnode;

typedef struct node

lsnode; 進棧

sqsnode s;

s.elem[s.top++]=e;

dsnode s;

*s.top++=e;

lsnode *top,*p;

p=new lsnode;p->data=e; p->next=top;top=p; 出棧

e=s.elem[--s.top];

e=*--s.top;

p=top;e=p->data;

top=top->next;delete(p) 棧空

s.top==0

s.top==s.elem

top==null 棧滿

s.top==ssize

s.top==s.elem+s.ssize

空間分配失敗p==null

棧的應用舉例:表示式求值和遞迴的實現。

【例】算術表示式a+b*c/(d-e)-f的逆波蘭式為abc*de-/+f-;

【例2】已知

下列演算法

void p(int n)

用p(5)

呼叫的結果是:

4 2 1 3 5

分析:當遇到呼叫語句時將引數、返回位址進棧;當遇到函式結束時退棧返回。

佇列佇列的定義:佇列是一種只能在表的尾端進行插入操作,在首端進行刪除操作的線性資料結構。它是先進先出(

fifo

)的線性表。

佇列的儲存結構:有順序佇列

—迴圈佇列,設有首指標和尾指標;鏈佇列

—一般在單迴圈鍊錶上實現,只設尾指標,不設首指標稱迴圈鏈佇列。

佇列的操作:初始化佇列、進隊、出隊,通過佇列的首指標

front

和尾指標

rear

實現操作如表

2-4所示。 表

2-4 

迴圈佇列和迴圈鏈佇列的操作

迴圈佇列

迴圈鏈佇列

型別定義

#define qsize 10

typedef struct sqqnode;

typedef struct node

lqnode; 進隊

sqqnode q;

q.rear=(q.rear+1)% qsize;

q.elem[q.rear]=e;

lqnode *rear,*p;

p=new lqnode; p->data=e; p->next=rear->next; rear->next=p; rear=p; 出隊

q.front=(q.front+1)% qsize;

e=q.elem[q.front];

p=rear->next; e=p->data;(

無頭鍊錶)

rear->next=p->next;delete(p);

隊空 q.front==q.rear

rear==null 隊滿

q.front==(q.rear+1)%qsize

空間分配失敗p==null

【例3-3】設

迴圈佇列

q,則當前迴圈佇列中的元素個數是:

(q.rear-q.front+

qsize

)%qsize.

Java基礎知識 陣列

b 陣列概念 c 陣列定義格式 資料型別 陣列名 new 資料型別 陣列的長度 b 如何對陣列進行初始化 b 靜態初始化 給出初始化值,由系統決定長度 c 動態初始化的格式 d 案例演示 b 堆 掌握 c 方法區 d 本地方法區 e 暫存器 b 案例演示 c 畫圖演示 b nullpointerex...

js基礎知識 陣列

學而不思則罔,思而不學則殆。系統地總結一下陣列和常用的方法 二 陣列的基礎方法 4.陣列中新增元素的方法 5.陣列的合併 arr.concat 6.陣列的擷取 arr.slice start,end 7.tolocalestring 有冷門知識哈 三 陣列的高階方法 2.顛倒陣列元素的順序 arr....

Java基礎知識 陣列和函式

2.1 遍歷 2.2 最值 最大值public static int getmax int arr return max 最小值public static int getmin int arr int min arr 0 for int x 1 x 2.3 逆序 2.4 二分查詢法 當函式運算後,沒...