作业

顺序表相关内容:

head.h

#ifndef head_h
#define head_h#include <stdio.h>
#include <stdlib.h>typedef int dt;typedef struct Node{union{int len;dt data;};struct Node *last;struct Node *next;
}Node,*LoopDbLink;LoopDbLink applyOne();void *freeOne(void *one);void *freeAll(LoopDbLink head);void initHead(LoopDbLink head);int isEmpty(LoopDbLink head);
int isInRange(LoopDbLink head,int pos);
LoopDbLink findOneByPos(LoopDbLink head,int pos);
LoopDbLink fineOneByData(LoopDbLink head,dt data);int insertOneByIndex(LoopDbLink head,int pos,dt data);int insertOne(LoopDbLink head,LoopDbLink last,LoopDbLink next,dt data);void inputFromTail(LoopDbLink head,int n);void outputInfo1(LoopDbLink head);void inputFromHead(LoopDbLink head,int n);void outputInfo2(LoopDbLink head);void deleteFromHead(LoopDbLink head);
void deleteFromTail(LoopDbLink head);
int deleteOneByIndex(LoopDbLink db,int pos);
int deleteOneByData(LoopDbLink db,dt data);
void deleteOne(LoopDbLink head,LoopDbLink one);void initList(LoopDbLink head,int n);
void JosephCircle(LoopDbLink head,int m);void sortList(LoopDbLink head);#endif

test.c

#include "head.h"
LoopDbLink applyOne(){LoopDbLink dbLink = (LoopDbLink)malloc(sizeof(Node));return dbLink;
}void *freeOne(void *one){if(one != NULL)free(one);return NULL;
}void *freeAll(LoopDbLink head){LoopDbLink one=head->next,t;while(one){t = one->next;printf("free node(%d)\n",one->data);one = freeOne(one);one = t;if(one == head)break;}printf("free head node\n");head = freeOne(head);return NULL;
}void initHead(LoopDbLink head){head->len = 0;head->last = head;head->next = head;
}int isEmpty(LoopDbLink head){if(head->len == 0)return 1;return 0;
}
int isInRange(LoopDbLink head,int pos){if(pos>=1 && pos<=head->len)return 1;return 0;
}
LoopDbLink findOneByPos(LoopDbLink head,int pos){if(pos > head->len || pos<=0)return NULL;LoopDbLink db = head;int i = 0;for(;i<pos;i++)db = db->next;printf("find node(%d)\n",db->data);return db;
}
LoopDbLink fineOneByData(LoopDbLink head,dt data){LoopDbLink node = head;int i=0;for(;i<head->len;i++){node = node->next;if(node->data == data)return node;}return NULL;
}int insertOneByIndex(LoopDbLink head,int pos,dt data){LoopDbLink db = findOneByPos(head,pos);if(db == NULL)return 0;return insertOne(head,db->last,db,data);
}int insertOne(LoopDbLink head,LoopDbLink last,LoopDbLink next,dt data){LoopDbLink dbLink = applyOne();if(dbLink == NULL){return 0;}last->next = dbLink;next->last = dbLink;dbLink->data = data;dbLink->last = last;dbLink->next = next;head->len++;return 1;
}void inputFromTail(LoopDbLink head,int n){int i = 0;dt data;LoopDbLink last = head;for(;i<n;i++){scanf("%d",&data);insertOne(head,last,head,data);last = last->next;}
}void initList(LoopDbLink head,int n){int i = 0;LoopDbLink last = head;for(;i<n;i++){insertOne(head,last,head,i+1);last = last->next;}
}void inputFromHead(LoopDbLink head,int n){int i = 0;dt data;LoopDbLink next = head;for(;i<n;i++){scanf("%d",&data);insertOne(head,head,next,data);next = head->next;}
}void deleteFromHead(LoopDbLink head){if(isEmpty(head))return;deleteOne(head,head->next);
}void deleteFromTail(LoopDbLink head){if(isEmpty(head))return;deleteOne(head,head->last);
}int deleteOneByIndex(LoopDbLink head,int pos){LoopDbLink db = findOneByPos(head,pos);if(db == NULL){return 0;}deleteOne(head,db);return 1;
}
int deleteOneByData(LoopDbLink head,dt data){LoopDbLink node = fineOneByData(head,data);if(node == NULL){printf("%d not found!\n",data);return 0;}deleteOne(head,node);return 1;
}
void deleteOne(LoopDbLink head,LoopDbLink one){if(head == NULL || one == NULL || isEmpty(head))return;LoopDbLink last = one->last;LoopDbLink next = one->next;next->last = one->last;last->next = one->next;one = freeOne(one);head->len--;if(head->len == 0){initHead(head);}
}void outputInfo1(LoopDbLink head){printf("(顺时针):len=%d %p %p %p\n",head->len,head,head->last,head->next);LoopDbLink one = head;int i=0;for(;i<head->len;i++){one = one ->next;printf("data=%d address=%p last=%p next=%p\n",one->data,one,one->last,one->next);}
}void outputInfo2(LoopDbLink head){printf("(逆时针):len=%d %p %p %p\n",head->len,head,head->last,head->next);LoopDbLink one = head;int i=0;for(;i<head->len;i++){one = one->next;printf("data=%d address=%p last=%p next=%p\n",one->data,one,one->last,one->next);}
}void JosephCircle(LoopDbLink head,int m){printf("circle start:\n");int len = head->len;LoopDbLink node = head,last=head;int i,count;for(i=1;i<=len-1;i++){count = 0;while(count < m){if(node->next == head){node = node->next;continue;}last = node;node = node->next;count++;}printf("delete %d\n",node->data);deleteOne(head,node);}printf("winner is %d!\n",head->next->data);
}
void sortList(LoopDbLink head){dt data;LoopDbLink node = head->next,temp,min;while(node && node != head){min = node;temp = node->next;while(temp && temp != head){if(min->data > temp->data){min = temp;}temp = temp->next;}if(min != node){data = node->data;node->data = min->data;min->data = data;}node = node->next;}
}

main.c

#include "head.h"
int main(int argc, const char *argv[])
{LoopDbLink head = applyOne();if(head == NULL){printf("Head is NULL!\n");return -1;}else{initHead(head);}int n = 2;printf("inputFromTail(head,%d)\n",n);inputFromTail(head,n);outputInfo1(head);deleteFromHead(head);printf("deleteFromHead\n");outputInfo1(head);deleteFromTail(head);printf("deleteFromTail\n");outputInfo1(head);int n2 = 5;printf("inputFromHead(head,%d)\n",n2);inputFromHead(head,n2);outputInfo1(head);outputInfo2(head);printf("作业2实现双向链表按位置插入:\n");printf("insertOneByIndex(head,2,99)=%d\n",insertOneByIndex(head,2,99));outputInfo1(head);printf("deleteOneByIndex(head,2)=%d\n",deleteOneByIndex(head,2));outputInfo1(head);printf("作业1实现双向链表按元素删除:\n");printf("deleteOneByData(head,5)=%d\n",deleteOneByData(head,5));outputInfo1(head);printf("作业5 实现链表的简单排序(通用):\n");sortList(head);outputInfo1(head);printf("作业4删除链表中的所有节点:\n");head = freeAll(head);printf("作业3约瑟夫环问题:\n");int nn,mm;printf("请输入约瑟夫环n和m的值:\n");scanf("%d %d",&nn,&mm);LoopDbLink headx = applyOne();if(headx == NULL){return -1;}else{initHead(headx);}printf("初始化initList(head,%d):\n",nn);initList(headx,nn);outputInfo1(headx);JosephCircle(headx,mm);headx = freeAll(headx);return 0;
}

result:

inputFromTail(head,2)
1
2
(顺时针):len=2 0x55c029e77260 0x55c029e77ac0 0x55c029e77aa0
data=1 address=0x55c029e77aa0 last=0x55c029e77260 next=0x55c029e77ac0
data=2 address=0x55c029e77ac0 last=0x55c029e77aa0 next=0x55c029e77260
deleteFromHead
(顺时针):len=1 0x55c029e77260 0x55c029e77ac0 0x55c029e77ac0
data=2 address=0x55c029e77ac0 last=0x55c029e77260 next=0x55c029e77260
deleteFromTail
(顺时针):len=0 0x55c029e77260 0x55c029e77260 0x55c029e77260
inputFromHead(head,5)
1
2
3
4
5
(顺时针):len=5 0x55c029e77260 0x55c029e77ac0 0x55c029e77b20
data=5 address=0x55c029e77b20 last=0x55c029e77260 next=0x55c029e77b00
data=4 address=0x55c029e77b00 last=0x55c029e77b20 next=0x55c029e77ae0
data=3 address=0x55c029e77ae0 last=0x55c029e77b00 next=0x55c029e77aa0
data=2 address=0x55c029e77aa0 last=0x55c029e77ae0 next=0x55c029e77ac0
data=1 address=0x55c029e77ac0 last=0x55c029e77aa0 next=0x55c029e77260
(逆时针):len=5 0x55c029e77260 0x55c029e77ac0 0x55c029e77b20
data=5 address=0x55c029e77b20 last=0x55c029e77260 next=0x55c029e77b00
data=4 address=0x55c029e77b00 last=0x55c029e77b20 next=0x55c029e77ae0
data=3 address=0x55c029e77ae0 last=0x55c029e77b00 next=0x55c029e77aa0
data=2 address=0x55c029e77aa0 last=0x55c029e77ae0 next=0x55c029e77ac0
data=1 address=0x55c029e77ac0 last=0x55c029e77aa0 next=0x55c029e77260
作业2实现双向链表按位置插入:
find node(4)
insertOneByIndex(head,2,99)=1
(顺时针):len=6 0x55c029e77260 0x55c029e77ac0 0x55c029e77b20
data=5 address=0x55c029e77b20 last=0x55c029e77260 next=0x55c029e77b40
data=99 address=0x55c029e77b40 last=0x55c029e77b20 next=0x55c029e77b00
data=4 address=0x55c029e77b00 last=0x55c029e77b40 next=0x55c029e77ae0
data=3 address=0x55c029e77ae0 last=0x55c029e77b00 next=0x55c029e77aa0
data=2 address=0x55c029e77aa0 last=0x55c029e77ae0 next=0x55c029e77ac0
data=1 address=0x55c029e77ac0 last=0x55c029e77aa0 next=0x55c029e77260
find node(99)
deleteOneByIndex(head,2)=1
(顺时针):len=5 0x55c029e77260 0x55c029e77ac0 0x55c029e77b20
data=5 address=0x55c029e77b20 last=0x55c029e77260 next=0x55c029e77b00
data=4 address=0x55c029e77b00 last=0x55c029e77b20 next=0x55c029e77ae0
data=3 address=0x55c029e77ae0 last=0x55c029e77b00 next=0x55c029e77aa0
data=2 address=0x55c029e77aa0 last=0x55c029e77ae0 next=0x55c029e77ac0
data=1 address=0x55c029e77ac0 last=0x55c029e77aa0 next=0x55c029e77260
作业1实现双向链表按元素删除:
deleteOneByData(head,5)=1
(顺时针):len=4 0x55c029e77260 0x55c029e77ac0 0x55c029e77b00
data=4 address=0x55c029e77b00 last=0x55c029e77260 next=0x55c029e77ae0
data=3 address=0x55c029e77ae0 last=0x55c029e77b00 next=0x55c029e77aa0
data=2 address=0x55c029e77aa0 last=0x55c029e77ae0 next=0x55c029e77ac0
data=1 address=0x55c029e77ac0 last=0x55c029e77aa0 next=0x55c029e77260
作业5 实现链表的简单排序(通用):
(顺时针):len=4 0x55c029e77260 0x55c029e77ac0 0x55c029e77b00
data=1 address=0x55c029e77b00 last=0x55c029e77260 next=0x55c029e77ae0
data=2 address=0x55c029e77ae0 last=0x55c029e77b00 next=0x55c029e77aa0
data=3 address=0x55c029e77aa0 last=0x55c029e77ae0 next=0x55c029e77ac0
data=4 address=0x55c029e77ac0 last=0x55c029e77aa0 next=0x55c029e77260
作业4删除链表中的所有节点:
free node(1)
free node(2)
free node(3)
free node(4)
free head node
作业3约瑟夫环问题:
请输入约瑟夫环n和m的值:
6
5
初始化initList(head,6):
(顺时针):len=6 0x55c029e77260 0x55c029e77b40 0x55c029e77ac0
data=1 address=0x55c029e77ac0 last=0x55c029e77260 next=0x55c029e77aa0
data=2 address=0x55c029e77aa0 last=0x55c029e77ac0 next=0x55c029e77ae0
data=3 address=0x55c029e77ae0 last=0x55c029e77aa0 next=0x55c029e77b00
data=4 address=0x55c029e77b00 last=0x55c029e77ae0 next=0x55c029e77b20
data=5 address=0x55c029e77b20 last=0x55c029e77b00 next=0x55c029e77b40
data=6 address=0x55c029e77b40 last=0x55c029e77b20 next=0x55c029e77260
circle start:
delete 5
delete 4
delete 6
delete 2
delete 3
winner is 1!
free node(1)
free head node

20230206 作业相关推荐

  1. LeetCode简单题之在既定时间做作业的学生人数

    题目 给你两个整数数组 startTime(开始时间)和 endTime(结束时间),并指定一个整数 queryTime 作为查询时间. 已知,第 i 名学生在 startTime[i] 时开始写作业 ...

  2. 作业函数的定义与调用

    作业函数的定义与调用 在 OneFlow 中,将训练.预测任务封装在一个函数中,统称为作业函数(job function),作业函数联系用户的业务逻辑与 OneFlow 管理的计算资源. 在 OneF ...

  3. 华东理工大学计算机应用基础,最新华东理工大学计算机应用基础网上作业及全部答案...

    精品文档 华东理工大学计算机应用基础网上作业及全部答案 2012计算机应用基础答案: 一.选择题 1.文件夹是用来对应用程序.文件进行分组的,以下说法中()正确.答:一个文件夹内可以包含文件.应用程序 ...

  4. 《小团团团队》第五次作业:项目需求分析改进与系统设计

    项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 实验九 团队作业5-团队项目需求改进与系统设计 团队名称 小团团团队 作业学习目标 (1)掌握面向对象需求分析方法:(2) ...

  5. 2017级面向对象程序设计 作业三

    Deadline:2018-05-13 22:00pm 题目升级 一栋10层的大楼(楼层编号1-10),设3台无限载重的电梯,初始时电梯停在1层.其中:1号电梯只能停留在奇数层,2号电梯可以各层都停留 ...

  6. 201621123068 作业08-集合

    1. 本周学习总结 2. 书面作业 1. ArrayList代码分析 1.1 解释ArrayList的<contains>源代码 答:源代码 public boolean contains ...

  7. 代码管理和版本管理的作业流程以及规范是怎样的?

    代码管理和版本管理的作业流程以及规范是怎样的? 代码管理和版本管理的作业流程以及规范是怎样的?下面以文档的形式进行详细分析,希望能够给予测试人员一些帮助和指导. 本文目的 本文试图提供一套有效进行代码 ...

  8. 结队项目——第一次作业

    By: 031502220 计算机二班 李自强031502344 计算机三班 郑世强 Table of Contents 一 需求分析:二 具体设计:三 系统功能说明:四 产品优劣势分析:五 PSP: ...

  9. 第三次作业+105032014085

    对修正后第2次作业+105032014141的单元测试 1.修正后的流程图 2.测试用例设计 3.单元测试框架 1 import static org.junit.Assert.*; 2 3 impo ...

最新文章

  1. 成为一流CSS设计师的8大技巧
  2. 图像水平梯度和竖直梯度代码_20行代码发一篇NeurIPS:梯度共享已经不安全了
  3. JavaScript提高:005:ASP.NET使用easyUI TABS标签显示问题
  4. 前端学习(675):if else if
  5. getsockname与getpeername
  6. sklearn数据集与估计器
  7. mysql索引抽密度_使用python脚本从abaqus输出数据库获取元素密度
  8. python日期选择框_Python的Django框架中设置日期和字段可选的方法
  9. C++ const型成员函数与 non-const型成员函数
  10. 阿里巴巴面试算法题目:25匹赛马,5个跑道,也就是说每次有5匹马可以同时比赛。问最少比赛多少次可以知道跑得最快的5匹马
  11. 机械硬盘如何克隆至固态硬盘,如何把硬盘系统克隆到固态硬盘
  12. 如何进行系统的架构设计?
  13. 浅析组合子集和的互异性
  14. csp-j2第四题解
  15. AI 投资探索路上的一些感受
  16. 洛谷 P1238 走迷宫【搜索】【DFS】
  17. JAVA毕业设计HTML5“守护萌宠”网站设计与实现计算机源码+lw文档+系统+调试部署+数据库
  18. python英文聊天机器人(亲测可用)
  19. 基于Ocelot的gRpc网关
  20. 经验分享-band 7.5已经工作的人如何准备雅思考试-学习心得-雅思频道|太傻网考试频道|常识 辅导 技巧 机经 名师 访谈 交流 资料 试题库...

热门文章

  1. 漫画脸软件哪个好?推荐这几款漫画脸软件
  2. js实现获取今日、本周、本月、本学期的开始结束日期
  3. 数字货币钱包 HD Wallet的助记词和种子的生成原理(BIP39)
  4. MySQL Replication 梳理详解
  5. 2020-10-19 进制转换
  6. 移动端测试——PO模式 (8)
  7. python 画图设置中文字体
  8. Java、生成车牌号码
  9. 非常好的免费开源网站原型图设计工具
  10. KDD CUP 2022 风能预测赛题冠军方案分享