#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
****************************************************************/