//带哨兵的双向链表
#include<stdio.h>
#include<stdlib.h>
typedef struct NODE{
struct NODE*prev;char key;struct NODE*next;
}NODE;
NODE*NIL=NULL;//双链表L的哨兵结点。
NODE*search(char key)//每次循环省略对p!=NULL的检查
{/*查找双链表L中第一个关键字为key的元素,并返回指向该元素的指针,
不存在key则返回NULL。*/
NODE*p=NIL->next;NIL->key=key;
while(p->key!=key) p=p->next;
if(p==NIL) {puts("This node doesn't exist.");return NULL;}
else return p;
}
void insert(NODE*p)//将p插入到L首端
{
NIL->next->prev=p;
p->next=NIL->next;
NIL->next=p;
p->prev=NIL;
}
void delete(NODE*p)//删除L中p指向的元素
{
if(!p) return;
p->prev->next=p->next;
p->next->prev=p->prev;
free(p);
}
NODE* createnode(char key)
{
NODE*p=(NODE*)malloc(sizeof(NODE));
if(!p){
puts("memory exhausted.");exit(1);
}
p->key=key;
return p;
}
void trave
带哨兵的双向链表
最新推荐文章于 2024-05-16 21:47:23 发布