day 1《大話資料結構》

2021-10-24 01:10:55 字數 4322 閱讀 3926

線性表(list): 零個或多個資料元素的有限序列

線性表的抽象資料型別:

adt 線性表(list)

data

operation

initlist (

*l): 初始化操作, 建立乙個空的線性表l.

listempty (l)

: 若線性表為空,返回true, 否則返回 false.

clearlist (

*l): 將線性表清空。

getelem (l, i,

*e): 將線性表 l 中第i個位置元素值返回給e。

locateelem (l, e)

listinsert (

*l, i, e)

listdelete (

*l, i, e)

: 刪除線性表 l 中的第 i 個位置元素, 並用e返回其值.

listlength (l)

: 返回線性表 l 的元素個數。

endadt

void

unionl

(list *la, list lb)

}描述順序儲存結構需要的三個屬性:

1.儲存空間的起始位置

2.線性表的最大儲存容量

3.線性表的當前長度

# define maxsize 20

typedef

int elemtype;

typedef

struct

sqlist;

陣列的長度是存放線性表的儲存空間的長度

線性表的長度是線性表中資料元素的個數

獲得元素操作

# define ok 1

# define error 0

# define true 1

# define false 0

typedef

int status;

status getelem

(sqlist l,

int i, elemtype *e)

插入操作

1.如果插入的位置不合理,丟擲異常

2.線性表長度大於等於陣列長度。 則丟擲異常或動態增加容量

3.從最後乙個元素開始向前遍歷到第i 個位置,分別將他們都向後移動乙個位置

4.將要插入的元素填入位置 i 處;

5.表長加 1

status listinsert

(sqlist *l,

int i, elemtype e)

l->data[i-1]

= e;

l->length++

;return ok;

}

刪除操作

1.如果刪除的位置不合理,丟擲異常

2.取出刪除元素

3.從刪除元素位置開始遍歷到最後乙個元素位置,分別將他們都向前移動乙個位置

4.表長減一

status listdelete

(sqlist *l,

int i, elemtype *e)

l->length--

;return ok;

}

typedef

struct node

node;

typedef

struct node *linklist;

宣告乙個指標p指向鍊錶的第乙個結點, 初始化 j 從 1 開始

當 j若到鍊錶末尾p為空,則說明第i個結點不存在;

否則查詢成功, 返回結點p的資料

status getelem

(linklist l,

int i, elemtype *e)if(

!p || j>i)

return error;

*e = p->data;

return ok;

}

s->next=p->next;

p->next=s;

status listinsert

(linklist *l,

int i, elemtype e)if(

!p || j>i)

return error;

s =(linklist)

malloc

(sizeof

(node));

s->data = e;

s->next = p->next;

p->next = s;

return ok;

}

q = p->next;

p->next = q->next;

status listdelete

(linklist *l,

int i, elemtype *e)if(

!(p->next)

|| j > i)

return error;

q = p->next;

p->next = q->next;

*e = q->data;

free

(q);

return ok;

}

void

creatlisthead

(linklist *l,

int n)

}

void

creatlisttail

(linklist *l,

int n)

}

status clearlist

(linklist *l)

(*l)

->next=

null

;return ok;

}

用陣列描述的鍊錶叫靜態鍊錶

靜態鍊錶要解決的是:如何用靜態模擬動態鍊錶結構的儲存空間分配,需要時申請,無用時釋放

# define maxsize 1000

typedef

struct

component, staticlinklist[maxsize]

;

status initlist

(staticlinklist space)

插入操作

int

malloc_sll

(staticlinklist space)

status listinsert

(staticlinklist l,

int i, elemtype e)

return error

}

靜態鍊錶的刪除操作

status listdelete

(staticlinklist l,

int i)

void

free_ssl

(staticlinklist space,

int k)

int

listlength

(staticlinklist l)

return j;

}

迴圈列表

p = reara->next;

reara->next=rearb->next->next;

q = rearb->next;

rearb->next=p;

free

(q);

雙向列表

typedef

struct dulnode

dulnode,

*dulinklist;

p->next->prior = p = p->prior->next
s->prior = p;

s->next = p->next;

p->next ->prior = s;

p->next = s;

p->prior->next = p->next

p->next->prior = p->prior

free

(p);

資料結構 day1

資料結構往往跟演算法有很大關係 ep1 圖書館 ep2 遞迴函式很有可能導致記憶體溢位 因為每一次遞迴都在記憶體裡新建了乙個 程式 如果遞迴次數過多,那麼這個程式占用的空間會很恐怖 ep3 多項式 正常演算法和秦九韶演算法的比較。秦九韶演算法有效的減少了乘法的量級 clock 獲得從程式開始到呼叫這...

資料結構day1 棧

1.什麼是棧 後進先出 lifo 的線性表,僅能在一邊進出。2.實現方式有 順序棧和鏈式棧 順序棧的實現 將陣列的尾部當作棧頂,在棧頂尾部進行pop和push操作只需要常數時間。順序棧的實現 public class astack implements stackadt astack void in...

資料結構和演算法 Day 1

資料結構是一門研究非數值計算的程式設計問題中的操作物件,以及他們之間的關係和操作等相關問題的學科。程式設計 資料結構 演算法 簡單來說,資料結構研究的是一種關係,就是資料元素相互之間存在的一種或多種特定關係的集合。傳統上,資料結構分為邏輯結構和物理結構 邏輯結構是指資料物件中的資料元素之間的相互關係...