数据结构
- 存储结构
- 逻辑结构
- 操作
逻辑结构
- 线性
- 树
- 图
算法分析:时间复杂度、空间复杂度
顺序表:算法简单、空间单元利用率高;但需要预先得知元素最多个数,插入删除需要移动的元素多。
#include <stdio.h>
typedef struct {
int nums[100];
int size;
}SZ;
void ListInitiate (SZ *L) {
L->size = 0;
}
int ListLength (SZ L) {
return L.size;
}
int ListInsert (SZ *L, int i, int x) {
int j;
for(j = L->size; j>i; j--) {
L->nums[j] = L->nums[j-1];
}
L->nums[i] = x;
L->size++;
return 1;
}
int ListDelete (SZ *L, int i, int *x) {
int j;
*x = L->nums[i];
for(j = i + 1; j <=L->size-1; j++) {
L->nums[j-1] = L->nums[j];
}
L->size--;
return 1;
}
int ListGet (SZ L, int i, int *x) {
if(i<0 || i>L.size-1) {
printf("参数i不合法!\n");
return 0;
}else {
*x = L.nums[i];
printf("%d ",*x);
return 1;
}
}
int main () {
SZ sz;
int x;
ListInitiate(&sz);
ListInsert(&sz, 0, 1);
ListInsert(&sz, 1, 2);
ListInsert(&sz, 2, 3);
ListInsert(&sz, 3, 4);
ListInsert(&sz, 4, 5);
ListInsert(&sz, 5, 6);
ListInsert(&sz, 6, 7);
ListInsert(&sz, 7, 8);
ListInsert(&sz, 8, 9);
ListInsert(&sz, 9, 10);
ListDelete(&sz, 4, &x);
int i;
for(i = 0; i < ListLength(sz); i++) {
ListGet(sz, i, &x);
}
return 0;
}