#include <stdio.h> #include <string.h> #define MAXSIZE 11 typedef char ElemType[8]; typedef struct { ElemType data; int cur; /* index of next node */ } NodeType; NodeType space[MAXSIZE]; typedef struct { int elem; /* index of head node */ int length; int listsize; } SLinkList; void InitSpace_SL(void) { int i; memset(space, 0, sizeof(space)); for (i = 0; i < MAXSIZE - 1; ++i) { space[i].cur = i + 1; } space[MAXSIZE-1].cur = 0; } int LocateElem_SL(SLinkList *S, ElemType e) { int i; i = S->elem; while (i && strcmp(space[i].data, e)) { i = space[i].cur; } return i; } int Malloc_SL(void) { int i; i = space[0].cur; if (i) { space[0].cur = space[i].cur; } return i; } void Free_SL(int k) { space[k].cur = space[0].cur; space[0].cur = k; } void InitList(SLinkList *S) { InitSpace_SL(); S->elem = Malloc_SL(); space[S->elem].cur = 0; S->length = 0; S->listsize = MAXSIZE - 2; } void ListInsert_SL(SLinkList *S, int i, ElemType e) { int j, k, count; if (i < 1 || i > S->length+1) { return; } k = Malloc_SL(); if (k) { sprintf(space[k].data, "%s", e); j = S->elem; for (count = 1; count < i; ++count) { j = space[j].cur; } space[k].cur = space[j].cur; space[j].cur = k; S->length += 1; } } void ListDelete_SL(SLinkList *S, int i) { int j, k, count; if (i < 1 || i > S->length) { return; } j = S->elem; for (count = 1; count < i; ++count) { j = space[j].cur; } k = space[j].cur; space[j].cur = space[k].cur; Free_SL(k); S->length -= 1; } void ListPrint_SL(SLinkList *S) { int i; for (i = 0; i < MAXSIZE; ++i) { printf("%-8s%2d\n", space[i].data, space[i].cur); } for (i = 0; i < 20; ++i) { printf("*"); } printf("\n"); } int main(void) { char cmd[10]; ElemType name; int i; SLinkList S; InitList(&S); while (scanf("%s", cmd) != EOF) { switch (cmd[2]) { case 's': /* insert */ scanf("%d", &i); scanf("%s", name); ListInsert_SL(&S, i, name); break; case 'l': /* delete */ scanf("%d", &i); ListDelete_SL(&S, i); break; case 'a': /* search */ scanf("%s", name); i = LocateElem_SL(&S, name); printf("%2d\n", i); for (i = 0; i < 20; ++i) { printf("*"); } printf("\n"); break; case 'o': /* show */ ListPrint_SL(&S); break; } } return 0; } /************************************************************** Problem: 2139 User: admin Language: C Result: Accepted Time:17 ms Memory:1148 kb ****************************************************************/