数据结构:双链表
由于双链表中大部分操作其实和单链表操作类似,所以这里只挑关键的一些函数
1、定义与初始化
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、在某结点添加和删除后继结点
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、摧毁整个双链表
oid DestroyDLinkList(DLinkList &L){ while (L->next!=NULL) { DeletNextDNode(L); } free(L); L=NULL; }
4、打印链表,包括打印整个链表,和从某个结点开始前向或者后向打印
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; } }
合集:
数据结构
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话