Miku可爱捏我是阿曼

数据结构:双链表

Human·2023-12-13 17:17·15 次阅读

数据结构:双链表

由于双链表中大部分操作其实和单链表操作类似,所以这里只挑关键的一些函数
1、定义与初始化

Copy
typedef struct DNode
{
ElementType data;
struct DNode *prior,*next;
}DNode,*DLinkList;
bool InitialDLinkList(DLinkList &L){
L = (DNode *)malloc(sizeof(DNode));
if (L==NULL)
{
return false;
}
L->prior = NULL;
L->next = NULL;
return true;
}

2、在某结点添加和删除后继结点

Copy
bool InsertNextDNode(DNode *p,DNode *s){//在p结点添加后继结点
if (p==NULL||s==NULL)
{
return false;
}
s->next = p->next;
if (p->next!=NULL)
{
p->next->prior=s;
}
s->prior = p;
p->next = s;
return true;
}
bool DeletNextDNode(DNode *p){//删除p的后继结点
if(p==NULL) return false;
DNode *q = p->next;
if (q==NULL) return false;
p->next = q->next;
if (q->next!=NULL)
q->next->prior=p;
free(q);
return true;
}

3、摧毁整个双链表

Copy
oid DestroyDLinkList(DLinkList &L){
while (L->next!=NULL)
{
DeletNextDNode(L);
}
free(L);
L=NULL;
}

4、打印链表,包括打印整个链表,和从某个结点开始前向或者后向打印

Copy
void print(DLinkList &L){
DNode *p = L->next;
while(p->next!=NULL){
printf("%d",p->data);
p=p->next;
}
}
void print_next(DNode *p){
while(p->next!=NULL){
printf("%d",p->data);
p=p->next;
}
}
void print_prior(DNode *p){
while(p->prior!=NULL){
printf("%d",p->data);
p=p->prior;
}
}
posted @   想成为编程高手的阿曼  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示