#include <stdio.h> #include <stdlib.h> typedef enum { OK, ERROR } Status; typedef int ElemType; typedef struct DuLNode { ElemType data; struct DuLNode *prior; struct DuLNode *next; } DuLNode, *DuLinkList; void ListCreate_DuL(DuLinkList *L) { *L = (DuLinkList) malloc(sizeof(DuLNode)); (*L)->prior = *L; (*L)->next = *L; } DuLinkList GetElemP_DuL(DuLinkList L, int i) { DuLinkList p; int j; p = L->next; j = 1; while (p != L && j < i) { p = p->next; ++j; } if (p == L && j < i) { return NULL; } else { return p; } } Status ListInsert_DuL(DuLinkList *L, int i, ElemType e) { DuLinkList p, s; if (!(p = GetElemP_DuL(*L, i))) { return ERROR; } if (!(s = (DuLinkList) malloc(sizeof(DuLNode)))) { return ERROR; } s->data = e; s->prior = p->prior; p->prior->next = s; s->next = p; p->prior = s; return OK; } Status ListDelete_DuL(DuLinkList *L, int i, ElemType *e) { DuLinkList p; if (!(p = GetElemP_DuL(*L, i))) { return ERROR; } *e = p->data; p->prior->next = p->next; p->next->prior = p->prior; free(p); return OK; } void ListPrint_DuL(DuLinkList L) { DuLinkList p; for (p = L->next; p->next != L; p = p->next) { printf("%d ", p->data); } if (p != L) { printf("%d\n", p->data); } } int main(void) { int cmd, i, e; DuLinkList L; ListCreate_DuL(&L); while (scanf("%d", &cmd) != EOF) { switch (cmd) { case 0: ListPrint_DuL(L); break; case 1: scanf("%d %d", &i, &e); ListInsert_DuL(&L, i, e); break; case 2: scanf("%d", &i); ListDelete_DuL(&L, i, &e); break; } } return 0; } /************************************************************** Problem: 2140 User: admin Language: C Result: Accepted Time:14 ms Memory:1144 kb ****************************************************************/