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

2024.7.22 作业

1.将双向链表和循环链表自己实现一遍,至少要实现创建、增、删、改、查、销毁工作

循环链表

looplinklist.h
#ifndef LOOPLINKLIST_H
#define LOOPLINKLIST_H#include <myhead.h>typedef int datatype;typedef struct Node
{union {int len;datatype data;};struct Node *next;
}Node,*NodePtr;//创建循环链表
NodePtr list_create();//链表判空
int list_empty(NodePtr L);//链表申请空间封装节点
NodePtr apply_node(datatype e);//按位置进行查找
NodePtr list_search_pos(NodePtr L,int pos);//链表尾插
int list_insert_tail(NodePtr L,datatype e);//链表遍历
int list_show(NodePtr L);//链表头删
int list_delete_head(NodePtr L);//链表销毁
void list_destroy(NodePtr L);//约瑟夫环
void ysfh(NodePtr L,int m);#endif
 looplinklist.c
#include "looplinklist.h"//创建循环链表
NodePtr list_create()
{NodePtr L=(NodePtr)malloc(sizeof(Node));if( NULL==L ){printf("创建失败\n");return NULL;}L->len = 0;L->next = L;printf("创建成功\n");return L;
}//链表判空
int list_empty(NodePtr L)
{return L->next==L;
}//链表申请空间封装节点
NodePtr apply_node(datatype e)
{NodePtr p = (NodePtr)malloc(sizeof(Node));if( NULL==p ){printf("申请失败\n");return NULL;}p->data = e;p->next = NULL;return p;
}//按位置进行查找
NodePtr list_search_pos(NodePtr L,int pos)
{if( NULL==L || pos<0 || pos>L->len){printf("查找失败\n");return NULL;}NodePtr q = L;for(int i=1;i<=pos;i++){q=q->next;}return q;
}//链表尾插
int list_insert_tail(NodePtr L,datatype e)
{if( NULL==L ){printf("尾插失败\n");return -1;}NodePtr p = apply_node(e);if( NULL==p ){return -1;}NodePtr q = list_search_pos(L,L->len);p->next = q->next;q->next = p;L->len++;return 0;
}//链表遍历
int list_show(NodePtr L)
{if( NULL==L || list_empty(L) ){printf("遍历失败\n");return -1;}NodePtr q = L->next;while( q!=L ){printf("%d\t",q->data);q = q->next;}printf("\n");return 0;
}//链表头删
int list_delete_head(NodePtr L)
{if( NULL==L || list_empty(L) ){printf("头删失败\n");return -1;}NodePtr q = L->next;L->next = q->next;L->len--;free(q);q=NULL;return 0;
}//链表销毁
void list_destroy(NodePtr L)
{if( NULL==L ){printf("销毁失败\n");return ;}while( !list_empty(L) ){list_delete_head(L);}free(L);L=NULL;printf("销毁成功\n");return;
}

双向链表 

doublelinklist.h
#ifndef DOUBLELINKLIST_H
#define DOUBLELINKLIST_Htypedef char datatype;typedef struct Node
{union{int len;datatype data;}struct Node *prio;struct Node *next;
}Node,*NodePtr;//创建双向链表
NodePtr list_create();//链表判空
int list_empty(NodePtr L);//申请节点封装数据
NodePtr apply_node(datatype e);//链表头插
int list_insert_head(NodePtr L,datatype e);//链表遍历
int list_show(NodePtr L);//按位置查找返回节点
NodePtr list_search_pos(NodePtr L,int pos);//链表任意位置删除
int list_delete_pos(NodePtr L,int pos);//链表空间释放
void list_destroy(NodePtr L);#endif
doublelinklist.c
#include "doublelinklist.h"//创建双向链表
NodePtr list_create()
{NodePtr L = (NodePtr)malloc(sizeof(Node));if( NULL==L ){printf("创建失败\n");return NULL;}L->len = 0;L->prio = NULL;L->next = NULL;printf("创建成功\n");return L;
}//链表判空
int list_empty(NodePtr L)
{return L->next == NULL;
}//申请节点封装数据
NodePtr apply_node(datatype e)
{NodePtr p =(NodePtr)malloc(sizeof(Node));if( NULL==p ){printf("节点申请失败\n");return NULL;}p->data = e;p->prio = NULL;p->next =NULL;return
}//链表头插
int list_insert_head(NodePtr L,datatype e)
{if( NULL==L ){printf("头插失败\n");return -1;}NodePtr p = apply_node(e);if( NULL==p ){return -1;}if( list_empty(L) ){p->prio = L;L-next = p;}else{p->prio = L;p->next = L->next;L->next->prio = p;L-next = p;}L->len++;return 0;
}//链表遍历
int list_show(NodePtr L)
{if( NULL==L || list_empty(L) ){printf("遍历失败\n");return -1;}printf("当前数据为:");NodePtr q = L->next;while( q ){printf("%c\t",q->data);q=q->next;}printf("\n");return 0;
}//按位置查找返回节点
NodePtr list_search_pos(NodePtr L,int pos)
{if( NULL==L || list_empty(L) || pos<0 || pos>L->len ){printf("查找失败\n");return NULL;}NodePtr q = L;for(int i=1;i<=pos;i++){q = q->next;}return q;
}//链表任意位置删除
int list_delete_pos(NodePtr L,int pos)
{if( NULL==L || list_empty(L) || pos<1 || pos>L->len ){printf("删除失败\n");return -1;}NodePtr q = list_search_pos(L,pos);if( q->next==NULL ){q->prio->next==NULL;}else{q->prio->next = q->next;q->next->prio = q->prio;}free(q);q=NULL;L->len--;return 0;
}//链表空间释放
void list_destroy(NodePtr L)
{if( NULL==L ){printf("释放失败\n");return ;}while( !list_empty(L) ){list_delete_pos(L,1);}free(L);L=NULL;printf("链表释放成功\n");return ;
}

 

2.使用循环链表完成约瑟夫环问题

//约瑟夫环
void ysfh(NodePtr L,int m)
{NodePtr p = L->next;NodePtr q = L;while( p->next!=p ){for(int i=1;i<m;i++){q = p;p = p->next;if(p==L){q=q->next;p=p->next;}}printf("%d\t",p->data);NodePtr a = p;           //标记q->next = p->next;   //p->next 孤立p=p->next;free(a);                   //释放a = NULL;}printf("\n最后剩下的节点: %d\n", p->data);  free(p); // 释放最后一节点  }

3.使用栈,完成进制转换

输入:一个整数,进制数

输出:该数的对应的进制数

void DC(StackPtr S,int m,int n)
{while(m/n!=0){S->top++;S->data[S->top]=m%n;m=m/n;}S->top++;S->data[S->top]=1;while(S->top!=-1){printf("%d",S->data[S->top]);S->top--;}printf("\n");
}

思维导图

http://www.lryc.cn/news/405194.html

相关文章:

  • 如何使用aiohttp或requests-async等库并发地执行多个HTTP请求
  • Golang | Leetcode Golang题解之第257题二叉树的所有路径
  • 关于css中flex布局垂直居中失效问题的原因
  • 用Redisson写一个库存扣减的方法
  • 第2节课:文本内容与格式化——HTML中的文本处理技巧
  • temu平台电池/锂电池UN38.3资质合规解析
  • Huawei、Cisco 路由中 RIP 协议 summary 的用法
  • 智能图像信息提取(飞桨OCR+ERNIE-Layout)
  • Ubuntu 24.04 LTS Noble安装 FileZilla Server
  • 【关于使用swoole的知识点整理】
  • 迁移学习:目标检测的加速器
  • gitee的怎么上传项目
  • 【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(二十三)
  • .NET C# 配置 Options
  • 42、PHP 实现把二叉树打印成多行
  • verilog bug记录——正点原子spi_drive存在的问题
  • vue+watermark-dom实现页面水印效果
  • 为什么要学习网安技术?
  • 2024春秋杯网络安全联赛夏季赛Crypto(AK)解题思路及用到的软件
  • vue2 使用代码编辑器插件 vue-codemirror
  • 自动驾驶系列—智能巡航辅助功能中的横向避让功能介绍
  • 通过this.$options.data()重置变量时,会影响到引用了props或methods的变量
  • [PM]产品运营
  • 流程控制语句
  • 杰发科技AC7840——SENT数据解析及软件Sent发送的实现
  • Java后端开发(十五)-- Ubuntu 开启activemq开机自启动功能
  • 56 网络层
  • MAC地址泛洪——华为ensp
  • golang 字符编码 gbk/gb2312 utf8编码相互转换,判断字符是否gbk编码函数, 字符编码转换基础原理解析, golang默认编码utf8
  • CentOS(7.x、8)上安装EMQX