#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define FALSE 0
#define TRUE 1
#define ERROR 0
typedef struct elem {
int n;
}elem;
typedef struct splist {
splist* prior;
elem data;
splist* nest;
}splist,*list;
int InitList(list &L) {
L = (list)malloc(sizeof(splist));
if (L == NULL) return ERROR;
L->data.n = 0;
L->prior = L;
L->nest = L;
return OK;
}
int CreateList(list &L) {
L = (list)malloc(sizeof(splist));
if (L == NULL) return ERROR;
L->nest = L;
L->prior = L;
int n = 0, m = 0;
printf("请输入元素的个数:");
scanf("%d", &n);
list p, q = L->nest;
while (n--) {
p = (list)malloc(sizeof(splist));
if (p == NULL) return ERROR;
scanf("%d", &m);
p->data.n = m;
p->prior = q;
p->nest = L;
q->nest = p;
q = p;
}
L->prior = q;
return OK;
}
int AddList(list &L, int i, int n) {
if (i <= 0) return FALSE;
int j = 0;
list p = L;
while (j < i-1 ) {
if (j != 0 && p == L) return ERROR;
p = p->nest;
j++;
}
list q = (list)malloc(sizeof(splist));
if (q == NULL) return ERROR;
q->data.n = n;
q->nest = p->nest;
q->prior = p;
p->nest->prior = q;
p->nest = q;
return OK;
}
int DeleteList(list &L, int i) {
if (i <= 0) return ERROR;
list p = L;
int j = 0;
while (j < i - 1 && p->nest != L) {
p = p->nest;
j++;
}
if (p->nest == L) return ERROR;
list q = p->nest;
p->nest = q->nest;
q->nest->prior = p;
free(q);
return OK;
}
int LengthList(list &L) {
list p = L;
int i = 0;
while (1) {
if (p == L && i != 0) return i;
i++;
}
return FALSE;
}
int EmptyList(list &L) {
if (L->nest == L) return TRUE;
return FALSE;
}
int SearchList(list &L, int i, elem* e) {
list p = L;
int j = 0;
while (j < i - 1) {
if (p == L && j != 0) return FALSE;
j++;
p = p->nest;
}
e->n = p->nest->data.n;
return OK;
}
int ClearList(list &L) {
list p = L->nest,q;
while (p != L) {
q = p->nest;
p->prior->nest = p->nest;
p->nest->prior = p->prior;
free(p);
p = q;
}
return OK;
}
int DestoryList(list &L) {
list p = L->nest, q;
while (p != L) {
q = p->nest;
p->prior->nest = p->nest;
p->nest->prior = p->prior;
free(p);
p = q;
}
free(L);
return OK;
}
int ContactList(list &a, list &b) {
list e;
while (b->nest != b) {
e = b->nest;
b->nest = e->nest;
e->nest->prior = b;
e->nest = a;
e->prior = a->prior;
a->prior->nest = e;
a->prior = e;
}
free(b);
return 0;
}
int main()
{
return 0;
}