结构:
typedef struct dulnode {
elemtype data;
struct dulnode *prior;
struct dulnode *next;
}dulnode,*dulinklist;
初始化:
status initlist(dulinklist *l) {
*l = malloc(sizeof(dulnode));
if (!*l) return ERROR;
(*l)->next = (*l)->prior = *l;
return OK;
}
销毁:
status destroylist(dulinklist *l) {
dulinklist p = (*l)->next, q;
while (p != *l) {
q = p->next;
free(p);
p = q;
}
free(*l);
*l = NULL;
return OK;
}
取得某个位置的指针:
dulinklist getelemp(dulinklist l,int i) {
dulinklist p = l;
int j;
for (j = 1;j <=i;j++)p = p->next;
return p;
}
链表长度:
int listlength(dulinklist l) {
int i = 0;
dulinklist p = l->next;
while (p!=l) {
i++;
p = p->next;
}
return i;
}
链表节点插入:
status listinsert(dulinklist l, int i, elemtype e) {
dulinklist p, new;
if (i<1 || i>listlength(l) + 1) return ERROR;
if (!(p = getelemp(l,i-1))) return ERROR;
new = malloc(sizeof(dulnode));
if (!new) return ERROR;
new->next = p->next;
new->prior = p;
p->next->prior = new;
p->next = new;
new->data = e;
return OK;
}
链表节点删除:
status listdelete(dulinklist l, int i, elemtype *e) {
dulinklist p, q;
if (i<1 || i>listlength(l)) return ERROR;
if (!(p = getelemp(l, i - 1))) return ERROR;
q = p->next;
p->next = q->next;
q->next->prior = p;
q->data = *e;
free(q);
return OK;
}