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