廢話不多說,直接粘**,一切盡在**中。
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...