当前位置: 首页 > news >正文

12.17双向链表,循环链表

循环单向链表 

1.头文件test.h

#ifndef __TEST_H_
#define __TEST_H_#include<stdio.h>
#include<stdlib.h>typedef struct node
{union{int len;int data;};struct node *next;
}looplink,*looplinkPtr;//创建
looplinkPtr create();//判空
int empty();
//申请节点
looplinkPtr create_node();
//尾插
int tail_add(looplinkPtr H,int e);//遍历
void  show(looplinkPtr H);
//尾删
void tail_del(looplinkPtr H);
//销毁
void my_free(looplinkPtr H);#endif

2.源文件test.c

#include"test.h"//创建
looplinkPtr create()
{looplinkPtr H=(looplinkPtr)malloc(sizeof(looplink));if (NULL==H){printf("创建失败");return NULL;}H->len=0;H->next=H;printf("创建成功\n");return H;
}
//判空
int empty(looplinkPtr H)
{if(NULL==H){printf("判空失败");return -1;}return H->len==0;}
//申请节点
looplinkPtr create_node(int e)
{looplinkPtr p=(looplinkPtr)malloc(sizeof(looplink));if (NULL==p){printf("申请失败\n");return NULL;}p->data=e;p->next=NULL;return p;}
//尾插
int tail_add(looplinkPtr H,int e)
{if(NULL==H){printf("尾插失败");return 0;}
//申请节点,封装数据looplinkPtr p = create_node(e);//定义一个指针,指向最后一个节点looplinkPtr q=H;while(q->next !=H){q=q->next ;}//尾插q->next=p;p->next=H;H->len++;return 1;}
//遍历
void  show(looplinkPtr H)
{if(NULL==H||empty(H)){printf("遍历失败");return;}looplinkPtr p=H;for(int i=0;i<H->len;i++){p=p->next ;printf("%d ",p->data);}putchar(10);
}//尾删
void tail_del(looplinkPtr H)
{if (NULL==H||empty(H)){printf("删除失败\n");return;}//定义一个指针,指向最后一个节点的前一个节点looplinkPtr q=H;for(int i=0;i<H->len-1;i++){q=q->next;}free(q->next);q->next=H;H->len--;return ;}//销毁
void my_free(looplinkPtr H)
{if (NULL==H){printf("销毁失败");return ;}while (H->len>0){tail_del (H);}free(H);H=NULL;printf ("销毁成功\n");
}

3.测试文件main.c

#include "test.h"int main()
{looplinkPtr H=create();tail_add (H,10);tail_add (H,20);tail_add (H,30);tail_add (H,40);tail_add (H,50);show(H);tail_del (H);tail_del (H);show(H);my_free(H);return 0 ;
}

双向循环链表

1.头文件test.h

#ifndef __TEST_H__
#define __TEST_H__#include<stdio.h>
#include<stdlib.h>typedef struct node
{union{int len;int data;};struct node *next;struct node *prior;
}doublelooplink,*doublelooplinkptr;//创建
doublelooplinkptr create();//判空
int empty(doublelooplinkptr H);
//申请节点doublelooplinkptr create_node(int e);
//尾插
int tail_add(doublelooplinkptr H,int e);
//遍历
void show(doublelooplinkptr H);
//尾删
int tail_del (doublelooplinkptr H);
//销毁
void my_free(doublelooplinkptr H);#endif

  2.源文件test.c

#include "test.h"//创建
doublelooplinkptr create()
{doublelooplinkptr H=(doublelooplinkptr)malloc(sizeof(doublelooplink));if(NULL==H){printf("创建失败\n");return NULL;}H->len==0;H->next=H;H->prior=H;printf("创建成功\n");return H;}
//判空
int empty(doublelooplinkptr H)
{if (NULL==H){printf("判空失败\n");return -1;}return H->len==0;
}//申请节点doublelooplinkptr create_node(int e)
{doublelooplinkptr p=(doublelooplinkptr)malloc (sizeof(doublelooplink));if (NULL==p){printf("申请失败\n");return NULL;}p->data=e;p->next=NULL;p->prior=NULL;return p;}
//尾插
int tail_add(doublelooplinkptr H,int e)
{if (NULL==H){printf("尾插失败\n");return 0;}//申请节点 封装数据doublelooplinkptr p=create_node (e);//定义一个指针doublelooplinkptr q=H;while(q->next!= H){q=q->next;}//尾插p->next=H;p->prior=q;q->next=p;H->prior=p;H->len++;return 1;
}
//遍历
void show(doublelooplinkptr H)
{if (NULL==H){printf("遍历失败");return;}doublelooplinkptr p=H;for (int i=0;i<H->len;i++){p=p->next;printf("%d ",p->data);}putchar(10);
}
//尾删
int tail_del (doublelooplinkptr H)
{	if (NULL==H||empty(H)){printf("删除失败\n");return 0;}doublelooplinkptr q=H;
for (int i=0;i<H->len-1;i++){q=q->next;}free(q->next);q->next=H;H->prior =q->next->prior; H->len--;return 1;}
//销毁
void my_free(doublelooplinkptr H)
{if (NULL==H){printf("销毁失败");return ;}while (H->len>0){tail_del (H);}free(H);H=NULL;printf ("销毁成功\n");
}

 3.测试文件main.c

#include "test.h"int main()
{doublelooplinkptr H=create();tail_add(H,10);tail_add(H,20);tail_add(H,30);tail_add(H,40);show(H);tail_del(H);tail_del(H);show(H);my_free(H);	return 0;
}

 


http://www.mrgr.cn/news/80549.html

相关文章:

  • MySQL 事务与锁机制:确保数据一致性
  • 智慧农业应用场景|珈和科技智慧植保解决方案
  • 【Linux 篇】Docker 容器星河与镜像灯塔:Linux 系统下解锁应用部署奇幻征程
  • 算法刷题Day22:BM57 岛屿数量
  • IDEA 可视化使用 git rebase 合并分支步骤 使git分支树保持整洁
  • macos big sur 软件icons图标大全(新增至2719枚大苏尔风格图标)
  • (2024年最新)Linux(Ubuntu) 中配置静态IP(包含解决每次重启后配置文件失效问题)
  • PSIM不放接地原件
  • 那些不熟悉的C语言关键字-const
  • 3D视觉[一]3D计算机视觉
  • QT5.9.9+ARM开发环境搭建【详细步骤】
  • 3.2.1.2 汇编版 原子操作 CAS
  • Canoe CAPL编程
  • 2012年西部数学奥林匹克试题(几何)
  • ASR-LLM-TTS 实时语音对话助手:语音识别、大模型对话、声音生成
  • 算法题(7):n进制乘法表
  • kubeadm_k8s_v1.31高可用部署教程
  • DATA-HUB 安装与启动:
  • vertx idea快速使用
  • Qt WORD/PDF(二)使用 QtPdfium库实现 PDF操作、打印等
  • 生产环境迁移——harbor篇
  • VCU--新能源汽车VCU电控开发
  • linux ibus rime 中文输入法,快速设置为:默认简体 (****)
  • k8s控制器
  • [创业之路-198]:华为的成立发展与新中国的建立与发展路径的相似性比较
  • Windows系统VSCode 搭建ESP-IDF环境