完整代码
#include <stdio.h>
#include <stdlib.h>
#define len 10
int head;
typedef struct {
char data;
int cur;
} Component, SLinkList[len];
SLinkList* InitSpace_SL() {
SLinkList * list = calloc(len, sizeof(Component));
for (int i = 0; i < len; ++i) {
list[i]->cur = i + 1;
list[i]->data = '$';
}
list[len - 1]->cur = 0;
return list;
}
void OverLook(SLinkList *list) {
for (int i = 0; i < len; ++i)
printf("%c~%d ", list[i]->data, list[i]->cur);
printf("\n");
}
void Print(SLinkList *list) {
if (head == 0) return;
int p = head;
while (p != 0) {
printf("%c~%d ", list[p]->data, list[p]->cur);
p = list[p]->cur;
}
printf("\n");
}
int Malloc_SL(SLinkList *list) {
int i = list[0]->cur;
if (i) list[0]->cur = list[i]->cur;
return i;
}
void Free_SL(SLinkList *list, int k) {
list[k]->cur = list[0]->cur;
list[k]->data = '$';
list[0]->cur = k;
}
void Insert_SL(SLinkList *list, int k, char data) {
int i = Malloc_SL(list);
if (i == 0) return;
list[i]->data = data;
list[i]->cur = 0;
if (k == 0) {
list[i]->cur = head;
head = i;
} else if (k > 0) {
int p = head;
for (int j = 0; j < k - 1; ++j) p = list[p]->cur;
list[i]->cur = list[p]->cur;
list[p]->cur = i;
}
}
void Delete_SL(SLinkList *list, int k) {
if (head == 0) return;
if (k == 0) {
int temp = head;
head = list[head]->cur;
Free_SL(list, temp);
} else if (k > 0) {
int p = head;
for (int i = 0; i < k - 1; ++i) {
p = list[p]->cur;
if (p == 0) return;
}
int temp = list[p]->cur;
list[p]->cur = list[temp]->cur;
Free_SL(list, temp);
}
}
int main(int argc, char *argv[]) {
SLinkList * list = InitSpace_SL();
Insert_SL(list, 0, 'd');
Insert_SL(list, 0, 'b');
Delete_SL(list, 1);
Insert_SL(list, 1, 'c');
Insert_SL(list, 0, 'a');
Delete_SL(list, 10);
OverLook(list);
Print(list);
}
运行结果
$~4 c~0 b~1 a~2 $~5 $~6 $~7 $~8 $~9 $~0
a~2 b~1 c~0