//不带哨兵的双向链表
#include<stdio.h>
#include<stdlib.h>
typedef struct NODE{
struct NODE*prev;char key;struct NODE*next;
}NODE;
NODE*L=NULL;//双链表L的表头
NODE*search(char key)
{/*查找双链表L中第一个关键字为key的元素,并返回指向该元素的指针,
不存在key则返回NULL。*/
NODE*p=L;
while(p&&p->key!=key) p=p->next;
if(!p) puts("This node doesn't exist.");
return p;
}
void insert(NODE*p)//将p插入到L首端
{
p->next=L;
if(L) L->prev=p;
L=p;p->prev=NULL;
}
void delete(NODE*p)//删除L中p指向的元素
{
if(!p) return;
if(p->prev) p->prev->next=p->next;
else L=p->next;
if(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 traverse()
{
NODE*p;
for(p=L;p;p=p->ne
不带哨兵的双向链表
最新推荐文章于 2024-04-13 22:40:23 发布