線性表的順序存儲結構
- C/C++中藉助數組來實現順序表
基本操作
#define MAX_SIZE 50
#define FAILED 0
#define SUCCESS 1
typedef int ElemType
typedef struct SqList
{
ElemType data[MAX_SIZE];
int length;
}SqList;
SqList* CreateList(ElemType a[], int n)
{
int i = 0;
SqList* L = (SqList *)malloc(sizeof(SqList));
while (i < n)
{
L->data[i] = a[i];
i++;
}
L-> length = i;
return L;
}
SqList* InitList()
{
SqList* L = (SqList*)malloc(sizeof(SqList));
L->length = 0;
return L;
}
void DestroyList(SqList* L)
{
free(L);
}
int ListEmpty(SqList* L)
{
return (L->length == 0);
}
int ListLength(SqList* L)
{
return (L->length );
}
void DispList(SqList* L)
{
for (int i = 0; i < L->length; i++)
printf("%d ", L->data[i]);
printf("\n");
}
int LocateElem(SqList* L, ElemType e)
{
int i = 0;
while (i < L->length && L->data[i] != e)
i++;
if (i >= L->length)
return FAILED;
else
return i + 1;
}
int LocateElem(SqList* L, ElemType e)
{
int i = 0;
while (i < L->length && L->data[i] != e)
i++;
if (i >= L->length)
return FAILED;
else
return i + 1;
}
int ListInsert(SqList* L, int i, ElemType e)
{
if (i<1 || i>L->length)
return FAILED;
i--;
for (int j = L->length; j > i; j--)
L->data[j] = L->data[j - 1];
L->data[i] = e;
L->length++;
return SUCCESS;
}
int ListDelete(SqList* L, int i, ElemType* e)
{
if (i<1 || i>L->length)
return FAILED;
i--;
*e = L->data[i];
for (int j = i; j < L->length -1; j++)
L->data[j] = L->data[j + 1];
L->length--;
return SUCCESS;
}
應用實例
void DelListElem(SqList* L,ElemType e)
{
int k = 0;
for (int i = 0; i < L->length; i++)
{
if (L->data[i] != e)
{
L->data[k] = L->data[i];
k++;
}
}
L->length = k;
}
void Partition(SqList* L)
{
int temp = L->data[0];
int i = 0;
int j = L->length - 1;
while (i < j)
{
while (i<j && L->data[j]>temp)
j--;
L->data[i] = L->data[j];
while (i < j && L->data[i] <= temp)
i++;
L->data[j] = L->data[i];
}
L->data[i] = temp;
}
void OddToEven(SqList* L)
{
int i = 0;
int j = L->length - 1;
int temp = L->data[0];
while (i < j)
{
while (i < j && L->data[j] % 2 == 0)
j--;
L->data[i] = L->data[j];
while (i < j && L->data[i] % 2 == 1)
i++;
L->data[j] = L->data[i];
}
L->data[i] = temp;
}