个人学习笔记
顺序表
#define LIST_INIT_SIZE 100
#define LIST_INCREAMENT 10
typedef enum Status
{
success,fail,fatal,range_error
}Status;
typedef int ElemType;
typedef struct SqList
{
ElemType *elem;
int length;
int list_size;
}SqList, *Ptr;
typedef Ptr SqListPtr;
1. 合并无序顺序表
Status List_Union (SqListPtr La, SqListPtr Lb) //时间复杂度O(n^2)
{
ElemType elem;
Status status;
int i, j, len = List_Size(Lb);
for (i = 1; i <= len; i ++)
{
List_Retrieve (Lb, i, &elem);
status = List_Locate(La, elem, &j);
if (status != success)
{
status = List_Insert (La, 1, elem);
if (status != success) break; //插入失败则退出
}
else List_Add (La, j, 1);
}
return status;
}
2. 合并有序顺序表
Status List_Merge (SqListPtr La, SqListPtr, SqListPtr Lc) //时间复杂度O(n+m)
{
ElemType elem1, elem2;
Status status = List_Init(Lc);
int i = 1, j = 1, k = 1;
int n = List_Size(La), m = List_Size(Lb);
while (i <= n && j <= m)
{
List_Retrieve (La, i, &elem1);
List_Retrieve (Lb, j, &elem2);
if (elem1 < elem2) { status = List_Insert (Lc, k, elem1); i = i + 1; }
else { status = List_Insert (Lc, k, elem2); j = j + 1; }
k = k + 1;
}
while (i <= n) //表La还未处理完
{
List_Retrieve (La, i, &elem1);
status = List_Insert (Lc, k, elem1);
i = i + 1;
k = k + 1;
}
while (j <= m) //表La还未处理完
{
List_Retrieve (La, j, &elem2);
status = List_Insert (Lc, k, elem2);
j = j + 1;
k = k + 1;
}
return status;
}
3. 顺序表的基本操作
//头文件
#pragma once
#define bool int
#define LIST_INIT_SIZE 100
#define LIST_INCREAMENT 10
typedef int ElemType;
typedef enum Status
{
success, fail, fatal, range_error
}Status;
typedef struct SqList
{
ElemType *elem;
int length;
int list_size;
}SqList, *Ptr, *SqListPtr;
Status List_Init(SqListPtr L);
void List_Destroy(SqListPtr L);
void List_Clear(SqListPtr L);
bool List_Empty(SqListPtr L);
int List_Size(SqListPtr L);
Status List_Retrival(SqListPtr L, int pos, ElemType *elem);
Status List_Locate(SqListPtr L, ElemType elem, int *pos);
Status List_Insert(SqListPtr L, int pos, ElemType elem);
Status List_Delete(SqListPtr L, int pos);
Status List_Prior(SqListPtr L, int pos, ElemType *elem);
Status List_Next(SqListPtr L, int pos, ElemType *elem);
void List_Print(SqListPtr L);