資料結構 線性表的順序表示與實現

2022-04-08 23:58:09 字數 4159 閱讀 7643

廢話不多說,直接粘**,一切盡在**中。

list.h當中**:

/*

* * 檔名稱:list.h

* 檔案標識:見配置管理計畫書

* 摘 要:線性表的順序儲存

* * 當前版本:1.1

* 作 者:zhuxuekui3

* 完成日期:2023年5月4日

* * 取代版本:1.0

* 原作者 :zhuxuekui3

* 完成日期:2023年5月3日

*/#ifndef list_h

#define list_h#include

using

namespace

std;

//定義函式結果狀態**

#define true 1

#define false 0

#define ok 1

#define error 0

#define overflow -1

#define underflow -2

/********線性表的動態分配順序儲存結構*****

*/const

int list_init_size = 100

;const

int listincrement = 10

;typedef

intelemtype;

typedef

intstatus;

typedef

bool (*compareptr)(elemtype,elemtype);

//compareptr compare;

//用compareptr來申明全域性compare變數

typedef struct

sqlist

sqlist;

//初始化順序表

status initlist_sq(sqlist &l);

//在順序表l中第i個位置之前插入新的元素e

status listinsert_sq(sqlist &l,int

i,elemtype e);

//在順序表l中第i個位置刪除元素e,並用e返回其值

status listdelete_sq(sqlist &l,int i,elemtype &e); //

改.c檔案的同時必須改宣告

//將順序表中的元素輸出

status listprint_sq(sqlist &l);

//對無序的兩個順序表求並集

void union1(sqlist &la, sqlist &lb);

void union2(sqlist &la, sqlist &lb);

bool

equal(elemtype a, elemtype b);

//在順序表中查詢與e相同的元素,並返回e所在的位置

//int locateelem_sq(sqlist &l,elemtype e,bool (* compare)(elemtype,elemtype));

int locateelem_sq(sqlist &l,elemtype e,compareptr compare);

//取順序表中第i個元素賦給e

status getelem(sqlist &l,int i,elemtype &e);

//好像對不需要傳回來的資料,並不需要用引用,用形參就可以了

void mergelist_sq(sqlist la,sqlist lb,sqlist &lc);

#endif

list.cpp**:

/*

* * 檔名稱:list.cpp

* 檔案標識:見配置管理計畫書

* 摘 要:線性表的順序儲存

* * 當前版本:1.1

* 作 者:zhuxuekui3

* 完成日期:2023年5月4日

* * 取代版本:1.0

* 原作者 :zhuxuekui3

* 完成日期:2023年5月3日

*/#include

"stdafx.h

"#include

"list.h

"int

main()

//初始化線性表

status initlist_sq(sqlist &l)

l.length = 0; //

空表的長度為0

l.listsize = list_init_size; //

初始儲存容量

return

ok;}

//在順序表l中第i個位置之前插入新的元素e

status listinsert_sq(sqlist &l,int

i,elemtype e)

l.elem = newbase;//

new address

l.listsize += listincrement;//

add store memery

} elemtype * q = &(l.elem[i-1

]); elemtype * p = &(l.elem[l.length - 1

]); //這裡可以改為 = l.elem + l.length - 1;

for (p; p >= q; --p) //

一直迴圈到p = q為止

*q = e; //

插入e;

++l.length; //

表長加1;

return

ok;}

status listdelete_sq(sqlist &l,int i,elemtype &e)

--l.length;

return

ok;}

status listprint_sq(sqlist &l)

cout

ok;}

//對無序的兩個順序表求並集

/*有兩種思路,要麼重新開闢乙個lc,然後將兩者插入進去,不允許重複。但操作這種方法時候,

要求我們先排序。這樣操作才方便些。時間複雜度length(la)+length(lb).

或者,我們用控制變數法,這種方法時間複雜度length(la)*length(lb).

說白了,就是以空間換時間,或者以時間換空間,別無其他。

*///

時間複雜度length(la)*length(lb),節省了空間。

//下面語句是提取相同的元素到la中去,不是求並集,切記。

void union1(sqlist &la, sqlist &lb)

}q2 =temp;

++count;

}}//

將所有在lb中但不在la中的資料元素插入到la中去

void union2(sqlist &la, sqlist &lb)

}}//

在順序表中查詢與e相同的元素,並返回e所在的位置 compareptr compare

//int locateelem_sq(sqlist &l,elemtype e,bool (* compare)(elemtype,elemtype))

int locateelem_sq(sqlist &l,elemtype e,compareptr compare)

else

}status getelem(sqlist &l,int i,elemtype &e)

bool

equal(elemtype a, elemtype b)

else}//

已知順序表中la與lb有序,歸併

void mergelist_sq(sqlist la,sqlist lb,sqlist &lc)

elemtype *pc =lc.elem;

while(pa <= pa_last && pb <= pb_last) //

降序排列

else

if (*pa == *pb)

else

}while(pa <= pa_last) *pc++ = *pa++;

while(pb <= pb_last) *pc++ = *pa++;

}

資料結構 線性表的順序表示與實現

計算機內部線性表儲存方式 1 順序儲存 順序表 2 鏈式儲存 鍊錶 順序表示是指 用一組位址連續的儲存單元依次儲存線性表的資料元素 過程分析 假設線性表的每個資料元素需要占用x個儲存單元,並以所佔的第乙個單元的儲存位址作為資料元素起始的儲存位置,因為使用一組連續的儲存單元,所以下乙個資料元素的位置就...

資料結構 線性表的順序表示

1.相關概念 2.順序表的型別定義 順序表的儲存結構 define max 100 順序表可能達到的最大長度 typedef struct sq sqlist elemtype是乙個抽象資料型別 可以是int,float,double等或者是自定義的資料型別。在實際使用是可以使用int,float等...

資料結構之線性表(順序表示)

順序表定義 define maxsize 50 typedef struct sqlist 陣列動態分配 define maxsize 50 typedef struct sqlist 動態分配的語句 c l.data elemtype malloc sizeof elemtype initsize...