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

作业Day5:

1】思维导图

基于Day4链表的扩展

2】完成单向循环链表的所有操作 【创建、判空、尾插、遍历、尾删、销毁】

looplinkList.c文件

#include "looplinkList.h"
//创建循环链表
looplinkListPtr creatloopList()
{//申请地址looplinkListPtr H=(looplinkListPtr)malloc(sizeof(looplinkList));//判断是否合法if(NULL==H){printf("申请失败!\n");return NULL;}printf("申请成功!\n");//初始化H->len=0;H->next=H;return H;
}//判空
int ifEmpty(looplinkListPtr H)
{//判断地址是否合法if(NULL==H){printf("地址不合法!\n");return -1;}//判断链表是否为空:长度是否为0 或者 是否指向自己return H->len==0;
}looplinkListPtr creatNode(DataType e)
{//申请空间looplinkListPtr p=(looplinkListPtr)malloc(sizeof(looplinkList));//放入数据p->data=e;p->next=NULL;return p;
}//尾插
void enddAdd(looplinkListPtr H,DataType e)
{//判断地址是否合法if(NULL==H){printf("地址不合法!\n");return;}looplinkListPtr temp=H;//遍历得到最后一个节点while(temp->next!=H){temp=temp->next;}//申请新的节点looplinkListPtr newnode=creatNode(e);//使原最后一个节点,指向本节点temp->next=newnode;//使本节点指向头节点newnode->next=H;//尾插,链表长度+1H->len++;
}
//尾删数据
void enddelData(looplinkListPtr H)
{//判断地址是否合法if(NULL==H||ifEmpty(H)){printf("尾删失败!\n");return;}looplinkListPtr temp=H;//遍历得到最后一个节点的前一个节点while(temp->next->next!=H){temp=temp->next;}//释放所指向的空间free(temp->next);//将本空降指向头节点temp->next=H;//尾删,链表长度-1H->len--;
}//遍历:数据显示
void showData(looplinkListPtr H)
{//检查传入地址是否合法//检查链表是否非空if(NULL==H||ifEmpty(H)){printf("链表地址不合法或者链表数据为空!\n");}looplinkListPtr temp=H;while(temp->next!=H){temp=temp->next;printf("%d ",temp->data);}printf("\n");
}//销毁链表
void freeList(looplinkListPtr *HH)
{//判断地址是否合法if(NULL==*HH){printf("地址不合法!\n");return;}while((*HH)->len)//循环条件:本节点不是头节点{enddelData(*HH);}//释放头节点所在空间free(*HH);//将指向头节点的指针置NULL*HH=NULL;//本指针也置NULLHH=NULL;printf("链表已销毁!\n");
}

运行效果

3】完成双向循环链表的所有操作 【创建、判空、尾插、遍历、尾删、销毁】

loopDoubleList.c文件

#include "loopDoubleList.h"//创建循环双向链表
loopDoubleListPtr listMalloc()
{//申请节点loopDoubleListPtr H=(loopDoubleListPtr)malloc(sizeof(loopDoubleList));if(NULL==H){printf("申请失败!\n");return NULL;}printf("申请成功!\n");//数据初始化H->len=0;H->prior=H;H->next=H;return H;
}//判空
int ifEmpty(loopDoubleListPtr H)
{if(NULL==H){printf("链表地址不合法!\n");}return H->next==H;
}
//申请节点 放入数据
loopDoubleListPtr creatNode(DataType e)
{//申请空间loopDoubleListPtr p=(loopDoubleListPtr)malloc(sizeof(loopDoubleList));//放入数据p->data=e;p->prior=NULL;p->next=NULL;return p;
}//尾插
void enddAdd(loopDoubleListPtr H,DataType e)
{//判断地址是否合法if(NULL==H){printf("地址不合法!\n");return;}loopDoubleListPtr temp=H;//遍历得到最后一个节点while(temp->next!=H){temp=temp->next;}//申请新的节点loopDoubleListPtr newnode=creatNode(e);//处理本节点指向newnode->next=H;//本节点也指向Hnewnode->prior=temp;//本节点指向原最后一个节点//处理原最后一个节点指向:temp->next=newnode;//原最后一个节点指向本空间//处理头节点指向H->prior=newnode;//尾插,链表长度+1H->len++;
}//数据显示
void showData(loopDoubleListPtr H)
{//检查传入地址是否合法//检查链表是否非空if(NULL==H||ifEmpty(H)){printf("链表地址不合法!\n");}loopDoubleListPtr temp=H;while(temp->next!=H){temp=temp->next;printf("%d ",temp->data);}printf("\n");
}//尾删数据
void enddelData(loopDoubleListPtr H)
{//判断地址是否合法if(NULL==H||ifEmpty(H)){printf("尾删失败!\n");return;}loopDoubleListPtr temp=H;//遍历得到最后一个节点while(temp->next!=H){temp=temp->next;}//处理上一个空间的指向temp->prior->next=temp->next;//上一个空间指向下一个空间//处理下个空间的指向temp->next->prior=temp->prior;//下一个空间指向上一个空间//释放向本空间free(temp);//将本空间置NULLtemp=NULL;//尾删,链表长度-1H->len--;
}//销毁链表
void freeList(loopDoubleListPtr *HH)
{//判断地址是否合法if(NULL==*HH){printf("地址不合法!\n");return;}while((*HH)->len)//循环条件:本节点不是头节点{enddelData(*HH);}//释放头节点所在空间free(*HH);//将指向头节点的指针置NULL*HH=NULL;//本指针也置NULLHH=NULL;printf("链表已销毁!\n");
}

运行效果


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

相关文章:

  • 概率论得学习和整理24:EXCEL的各种图形,统计图形
  • Burp与小程序梦中情缘
  • 架构信息收集(小迪网络安全笔记~
  • 国信华源科技赋能长江蓄滞洪区水闸管护项目验收成果报道
  • 从〇开始深度学习(番外)——下载包
  • 分治算法——归并排序、快速排序(c++)
  • Mapbox-GL 的源码解读的一般步骤
  • 放大电路3
  • 类OCSP靶场-Kioptrix系列-Kioptrix Level 3
  • Vue.js前端框架教程5:Vue数据拷贝和数组函数
  • 一学就废|Python基础碎片,reduce函数
  • Python毕业设计选题:基于django+vue的宠物服务管理系统
  • 思考:VSCode 的宏观工作原理 快速入门 VSCodium (****)
  • 数字电视标准与分类
  • Kafka部署
  • 解决PyTorch模型推理时显存占用问题的策略与优化
  • 【BUG记录】Apifox 参数传入 + 号变成空格的 BUG
  • C-数据的存储
  • android opencv导入进行编译
  • Vue3期末复习
  • MySQL中Json字段
  • MySQL数据库sql教程-从入门到进阶
  • 【Linux】结构化命令:if-then语句
  • 基于python绘制数据表(下)
  • 一、基于langchain使用Qwen搭建金融RAG问答机器人--技术准备
  • samout llm解码 幻觉更低更稳定