线性表
顺序存储的类型表述
#include<stdio.h>
#include <math.h>
#define InitSize 100
typedef struct {
int *data;
int length;
int MaxSize;
}SqList;
bool InitList(SqList &L) {
L.data = (int *)malloc(InitSize * sizeof(int));
if (L.data == nullptr)
return false;
L.length = 0;
L.MaxSize = InitSize;
return true;
}
bool IncreaseSize(SqList &L, int len) {
int *p = L.data;
L.data = (int *) malloc((L.length + len) * sizeof(int));
if (L.data == nullptr)
return false;
for (int i = 0; i < L.length; ++i) {
L.data[i] = p[i];
}
L.MaxSize = L.MaxSize + len;
free(p);
return true;
}
bool ListInsert(SqList &L, int order, int elem) {
if (order < 1 || order > L.length + 1)
return false;
if (L.length >= L.MaxSize)
return false;
for (int i = L.length; i >= order; --i) {
L.data[i] = L.data[i-1];
}
L.data[order-1] = elem;
L.length++;
return true;
}
bool ListDelete(SqList &L, int order, int &elem) {
if (order < 1 || order > L.length)
return false;
elem = L.data[order-1];
for (int i = order; i < L.length; ++i) {
L.data[i-1] = L.data[i];
}
L.length--;
return true;
}
int LocateElem(SqList &L, int elem) {
for (int i = 0; i < L.length; ++i) {
if (L.data[i] == elem)
return i + 1;
}
return -1;
}
int GetElem(SqList L, int order) {
return L.data[order-1];
}
void ListPrint(SqList &L) {
for (int i=0; i<L.length; ++i) {
printf("下标%3d 位序%3d : %d\n", i, i+1, L.data[i]);
}
}