資料結構 線性表

2021-10-21 10:29:05 字數 4014 閱讀 4853

線性表示是具有相同特性資料元素的有限序列

相同特性:

把同一類事物歸類,方便批量處理

有限:表中元素個數為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...