線性表
線性表的定義:線性表是
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 二分查詢法 當函式運算後,沒...