#include<stdio.h>
#define MAX 10
typedef struct {
int next;
char e;
}elem;
typedef struct {
elem data[MAX];
int length;
}staticLinked;
staticLinked create();
void insert(staticLinked *linked, char e);
void delete(staticLinked *linked, char e);
int location(staticLinked *linked, char e);
int main() {
staticLinked linkedList = create();
insert(&linkedList, 'A');
insert(&linkedList, 'B');
insert(&linkedList, 'B');
insert(&linkedList, 'C');
insert(&linkedList, 'D');
insert(&linkedList, 'D');
insert(&linkedList, 'E');
insert(&linkedList, 'E');
insert(&linkedList, 'F');
insert(&linkedList, 'F');
insert(&linkedList, 'F');
insert(&linkedList, 'F');
delete(&linkedList, 'F');
printf("%d,", linkedList.length);
putchar('\n');
for (size_t i = 0; i < MAX; i++)
{
printf("%d,", linkedList.data[i].next);
}
putchar('\n');
for (size_t i = linkedList.data[MAX - 1].next; i != 0; i = linkedList.data[i].next)
{
printf("%c,", linkedList.data[i].e);
}
putchar('\n');
printf("所查找元素的位置:%d\n", location(&linkedList, '2'));
system("pause");
return 0;
}
staticLinked create() {
staticLinked linked = {
{0},
0
};
linked.data[MAX - 1].next = 0;
linked.data[MAX - 2].next = 0;
for (size_t i = 0; i < MAX - 2; i++)
linked.data[i].next = i+1;
return linked;
}
void insert(staticLinked *linked, char e) {
if (linked->length < MAX - 2)
{
int endPoint = MAX - 1;
while (linked->data[endPoint].next) {
if (e == linked->data[linked->data[endPoint].next].e)
return;
endPoint = linked->data[endPoint].next;
}
int emptyLocation = linked->data[0].next;
linked->data[0].next = linked->data[emptyLocation].next;
linked->data[emptyLocation].e = e;
linked->data[emptyLocation].next = 0;
linked->data[endPoint].next = emptyLocation;
if(!linked->data[MAX - 1].next)linked->data[MAX - 1].next = emptyLocation;
linked->length++;
}
}
void delete(staticLinked *linked, char e) {
int previous = MAX - 1;
int nextPoint = linked->data[previous].next;
while (nextPoint){
if (e == linked->data[nextPoint].e) {
linked->data[previous].next = linked->data[nextPoint].next;
linked->data[nextPoint].next = linked->data[0].next;
linked->data[0].next = nextPoint;
linked->length--;
break;
}
previous = linked->data[previous].next;
nextPoint = linked->data[previous].next;
}
}
int location(staticLinked *linked, char e) {
int location = linked->data[MAX - 1].next;
while (location){
if ( e == linked->data[location].e)
return location;
else location = linked->data[location].next;
}
return 0;
}