顺序表
线性表的顺序存储实现
1. 线性表的顺序存储实现
利用数组的 连续存储空间顺序存放 线性表的各元素
下标 i
0
1
i - 1
i
n - 1
MAXSIZE - 1
Data
-
typedef struct LNode* List;
struct LNode {
ElementType Data[MAXSIZE];
int Last;
};
struct LNode L;
List PtrL;
// 访问下标为 i 的元素:L.Data[i] 或 PtrL->Data[i]
// 线性表的长度:L.Last+1 或 PtrL->Last+1
2. 主要操作的实现
2.1 初始化(建立空的顺序表)
List MakeEmpty() {
List PtrL;
PtrL = (List)malloc(sizeof(struct LNode));
PtrL->Last = -1;
return PtrL;
}
2.2 查找
int Find(ElementType X, List PtrL) {
int i = 0;
while (i <= PtrL->Last && PtrL->Data[i] != X)
i++;
if (i > PtrL->Last) // 如果没有找到,返回 -1
return -1;
else // 找到后返回的是存储位置
return i;
}
void Insert(ElementType X, int i, List PtrL) {
int j;
if (PtrL->Last == MAXSIZE - 1) {
printf("表满\n");
return;
}
if (i < 1 || i > PtrL->Last + 2) { // 1 <= i <= n + 1
printf("位置不合法\n");
return;
}
for (j = PtrL->Last; j >= i - 1; j--)
PtrL->Data[j + 1] = PtrL->Data[j];
PtrL->Data[i - 1] = X;
PtrL->Last++;
return;
}
void Delete(int i, List PtrL) {
int j;
if (i < 1 || i > PtrL->Last + 1) {
printf("不存在第%d个元素\n", i);
return;
}
for (j = i; j <= PtrL->Last; j++)
PtrL->Data[j - 1] = PtrL->Data[j];
PtrL->Last--;
return;
}
最后更新于
这有帮助吗?