一:C语言版本
顺序表基本操作
InitList 初始化
Length 求表长
LocateElem 按值查找
GetElem 按位查找
ListInsert 插入操作
ListDelete 删除操作
PrintList 输出
Empty 判空操作
DestroyList 销毁
-
顺序表的定义
/***** InitSize 线性表长度 MaxSize 线性表允许的最大长度 Length 记录线性表当前长度 ******/ #define InitSize 100 typedef struct{ DataType *data; int MaxSize,Length; }SeqList;
-
初始化
bool InitList(SeqList *L){ L.data = (DataType *)malloc((sizeof(DataType)*InitSize)); if(NULL == L.data){ return false; } L.length = 0; L.MaxSize = InitSize; return true; }
-
插入(在第i个位置插入数据)
bool ListInsert(SeqList *L, int i, DataType e){
if(i<1 || i > L.Length+1){
return false;
}
if( L.Length >= L.MaxSize){
return false;
}
for( int j = L.Lengrh; j >= i; j--){
L.data[j] = L.data[j-1];
}
L.data[i-1] = e;
L.Length++;
return true;
}
- 头插
bool HeadInsert(SeqList *L, DataType e){
if(i < 1 || i > L.length+1 ){
return false;
}
if( L.Length >= L.MaxSize){
return false;
}
for( int j = L.Length; j > 0; j--){
L.data[j] = L.data[j-1];
}
L.data[0] = e;
L.Length++;
return true;
}
- 尾插
bool TailInsert(SeqList *L, DataType e){
if(i < 1 || i > L.length+1 ){
return false;
}
if( L.Length >= L.MaxSize){
return false;
}
L.data[L.Length] = e;
L.Length++;
return true;
}
- 删除第i个元素
bool ListDelet(SeqList *L, int i, DataType &e){
if(i < 1 || i > L.Length){
return false;
}
if(L.Length == 0){
print("Empty!\n")
}
e = L.data[i-1];
for(int j = i; j < L.Length; j++){
L.data[j-1] = L.data[j];
}
L.Length--;
return true;
}
- 头删
bool HeadDelet(SqlList *L, DataType &e){
if(L.Length == 0){
print("Empty!\n")
}
e = L.data[0];
for(int j = 1; j < L.Length; j++){
L.data[j-1] = L.data[j];
}
L.Length--;
return true;
}
- 尾删
bool TailDelet(SqlList *L, DataType &e){
if(L.Length == 0){
print("Empty!\n")
}
e = L.data[L.Length - 1];
L.Length--;
return true;
}
- 按值查找
```C
int LocateElem(SeqList L, DataType e){
for(int i = 0; i < L.Length; i++){
if(L.data[i] == e){
return i+1;
}
}
return 0;
}
```
-
按位查找
int GetElem(SeqList L, int i){ if(i < 1 || i > L.length){ return false; } retuen L.data[i-1]; }
-
求表长
```C
int Length(SeqList L){
return L.Length;
}
```
- 是否为空
```C
bool Empty(SeqList L){
if(L.Length == 0){
return true;
}else{
return false;
}
}
```
- 清空
```C
void ClearList(SeqList *L){
L.Length = 0;
}
```
- 销毁顺序表
```C
void DestroyList(SeqList *L){
L.Length = 0;
L.MaxSize = 0;
free(L.data);
L.data = NULL;
return true;
}
```
- 打印顺序表
```C
void PrintList(SeqList L){
if(L.Length == 0){
print("Empty!\n")
return true;
}
for(int i = 0; i < L.Length; i++){
print("data[%d] is %d\n", i, L.data[i]);
}
return true;
}
```
-
逆序
void InvertList(SeqList *L){ ElemType tmp; int m = L.Length/2; for(int i = 0; i < m; i++){ tmp = L.data[i]; L.data[i] = L.data[L.Length-1-i]; L.data[L.Length-1-i] = tmp; } }
- 冒泡排序
```C
BubbleSort(SeqList *L){
ElemType tmp;
if(L.Length == 0){
print("Empty!\n")
return true;
}
for(int i = 0; i < L.Length - 1; i++){
for(int j = 0; j < L.Length-1-i; j++){
if(L.data[j] > L.data[j+1]){
tmp = L.data[j+1];
L.data[j+1] = L.data[j];
L.data[j] = tmp;
}
}
}
}
```
- 选择排序
```C
void SelectSort(SeqList *L){
Elemtype tmp;
fot(int i = 0; i < L.Length - 1; i++){
max = i;
for(int j = i + 1; j < L.Length; j++){
if(L.data[j] > L.data[j]){
max = j;
}
}
if(max != i){
tmp = L.data[i];
L.data[i] = L.data[max];
L.data[max] = tmp
}
}
}
```
2:Python版本
由于Python的list和Tuple就是采用了顺序表的实现方式,这里不准备给出,意义不大。
如果你喜欢这篇文章,请给我点赞、分享;如果你不喜欢这篇文章,或者发现我的文章错误的地方,请在站内私信我,或者直接给我发邮件(cqcqhelloworld@gmail.com)。
网友评论