線性表示是具有相同特性資料元素的有限序列
相同特性:
把同一類事物歸類,方便批量處理
有限:表中元素個數為n,n有限大,n可以為0
序列:表中元素排成一列,體現了一對一的邏輯特性(每個元素有則僅有乙個前驅和乙個後繼)
順序表定義:
//地皮最大數量:maxsize
//房子最大數量:length
//地皮編號:0~maxsize-1
//房子編號:0~length-1
//房子實體:sqlist[0]~sqlist[length-1]
//房子蓋滿地皮:length==maxsize
int sqlist[maxsize]=;
int length=n;
順序表理解:
連續的地皮塊上蓋有連續的房子
鍊錶定義:
單鏈表:
typedef
struct lnode
lnode;
lnode *head;
//用於指示頭個建築的方向指示標
head=
(lnode*
)malloc
(sizeof
(lnode));
//創造頭個建築
雙鏈表:
typedef
struct dlnode
dlnode;
dlnode *head;
//用於指示頭個建築的方向指示標
head=
(dlnode*
)malloc
(sizeof
(dlnode));
//創造頭個建築
鍊錶理解:
分散的地皮塊上蓋有分散的房子,為了讓這些房子聯絡起來,給每塊地皮的邊上插上方向指示標,地皮、房子、方向指示標組合而成的結構稱為建築
插入操作:
int sqlist[maxsize]=;
int length=n;
intinsertelem
(int sqlist,
int&length,
int p,
int x)
for(i=length-
1;i>=p;i--
)}
刪除操作:int sqlist[maxsize]=;
int length=n;
intdeleteelem
(int sqlist,
int&length,
int p,
int&x)
x=sqlist[p]
;for
(i=p;i1;i++
)}
尾插法建立單鏈表:typedef
struct lnode
lnode;
void
createlinkedlistr
(lnode *
&head)
r->next=
null
;}
頭插法建立單鏈表:typedef
struct lnode
lnode;
void
createlinkedlisth
(lnode *
&head)
}
程式設計題:
鍵盤輸入n個英文本母,輸入格式為n,然後分別輸入c1、c2、c3、…、cn,其中n表示字母的個數。利用這些資料建立單鏈表且存入的字母互不相同.
typedef
struct lnode
lnode;
void
createlinknosameelem
(lnode *
&head)
if(p==null)
}}
順序表逆置:for
(int i=left,j=right;i;j--
)
鍊錶逆置:while
(p->next!=q)
程式設計題:
1.將一長度為n的陣列的前端k(kvoid
reverse
(int a,
int left,
int right,
int k)
}2.將一長度為n的陣列的前端k(kvoid
movetoend
(int a,
int n,
int k)
3.將陣列中的元素(x0,x1,…xn-1),經過移動後變為:(xp,xp+1,…xn-1,x0,x1,…xp-1),即迴圈左移p(0void
movep
(int a,
int n,
int p)
順序表取最大值:
int max=a[0]
;int maxidx=0;
for(
int i=
0;i)}
鍊錶取最大值結點:lnode *p=head-
>next,
*q=p;
int min=q-
>data;
while
(p!=
null
) p=p-
>next;
}
程式設計題:
一雙鍊錶非空,由head指標指出,結點結構為,請設計乙個將結點資料域data值最大的結點移動到鍊錶最前面的演算法,要求不得申請新結點空間
typedef
struct dlnode
dlnode;
void
maxfirst
(dlnode *head)
p=p-
>rlink;
} dlnode *l=q-
>llink,
*r=q-
>rllink;
l->rlink=r;
if(r!=
null
) q-
>llink=head;
q->rlink=head-
>rlink;
head-
>rlink=q;
q->rlink-
>llink=q;
}
順序表歸併:void
mergearray
(int a,
int m,
int b,
int n,
int c)
else
while
(iwhile
(j}}
鍊錶歸併:
歸併遞增鍊錶
void
mergeincrease
(lnode *heada,lnode *headb,lnode *
&headc)
else}if
(p==
null
) r-
>next=q;
if(q==
null
) r-
>next=p;
}
歸併遞減鍊錶
void
mergedecrease
(lnode *heada,lnode *headb,lnode *
&headc)
else}if
(p==
null)if
(q==
null
)}
void
partition
(int arr,
int n,
int k)
while
(i++i;
if(i} arr[i]
=temp;
}
資料結構(線性表)
1.試寫一演算法,在無頭結點的動態單鏈表上實現線性表操作insert l,i,b 並和在帶頭結點的動態單鏈表上實現相同操作的演算法進行比較。status insert linklist l,int i,int b 在無頭結點鍊錶l的第 i個元素之前插入元素 belse insert 2.已知線性表中...
資料結構 線性表
參考 一 線性表 順序表 單鏈表 迴圈鍊錶 雙鏈表 順序表 1.表的初始化 void initlist seqlist l 2.求表長 int listlength seqlist l 3.取表中第i個結點 datatype getnode l,i 4.查詢值為x的結點 5.插入 具體演算法描述 v...
資料結構 線性表
線性表是最基礎的一種資料結構,這樣的資料物件包含的資料元素具有一對一的前驅後繼關係。按其邏輯儲存方式的不同可分為兩類線性表 順序表和鏈式表。其中鏈式表又可分為線性鍊錶 迴圈鍊錶和雙向鍊錶。下面分別介紹下這幾種線性表的資料結構 1.順序表 typedef struct sqlist 插入演算法 i到n...