首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C语言实现

你可以把栈视作一个有下底盒子,然后你把各种书放进去,如果你想拿书,你拿到第一步一定是你最后放进去,这就是栈 首先考虑他形势,我们需要一个top指针和一个buttom指针分别指向栈顶和栈底下一个节点...因为方便:试想一下我们要判断栈是否空就只需要判断top是否等于buttom,如果buttom指向栈底显然就会麻烦许多 下面我们先用C语言实现一下: 首先我们需要对这个装东西“盒子”定义,而这个盒子就是栈...,而且我们没有把链表和节点概念分开,我们始终认为链表是由节点组成,而栈我们认为他是一个概念,然后节点可以放在里面(不过实际上代码是一个概念,只是形象用了两个结构体表示) 回到上面的话题,栈定义完了...struct stack *sk){ node *n=sk->top; sk->top=n->next; delete n; } 就像上面,另还要注意出栈需要考虑栈是否为空,我没有写 至此,一个C语言版本栈及其主要操作就完成了...,这也是我第一次写栈结构,因为我用C++ stack sk; sk.push(5); //..

3.8K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C语言队列实现

    我个人把链表、队列、栈分为一,然后图、树分为一。(串不考虑),分类理由就是每一有规律可循,即你能通过修改极少数代码把链表变成队列、栈。...(这里我们不考虑其他诸如设计模式等因素),因此本贴在讲完队列之后还会归纳一下这一数据结构规律,帮助大家更好理解数据结构 首先需要知道队列是什么,这里给一个定义:队列是只允许一段进行插入操作,一段进行删除操作线性表...,队列是先进先出结构,允许插入成为队尾,允许删除成为队头 如上图就是一个队列,这里我相信你已经对队列有了一个概念了吧,于是就可以继续看下面了 队列同样存在插入删除操作,由于我们这里讨论是链式队列实现...我们能很容易写出下面插入节点到队列代码(如果不能你就要发反思是否认真学习了): void en_queue(struct queue *q,char c){ struct node *e=new...n){ return; } e->data=c; e->next=NULL; if(q->rear==NULL){ q->front=q->rear

    3.4K20

    C++】日期实现

    实现日期过程中,日期加减天数应用场景一定会频繁使用到这个函数接口,因为加减天数会使得月份发生变化,可能增月或减月,这个时候就需要在day上面扣除或增加当年当月天数,所以这个接口非常重要。...由于Date成员变量都是内置类型,所以析构函数不需要我们自己写,因为没有资源申请。并且拷贝构造和赋值重载也不需要写,因为Date不涉及深拷贝问题,仅仅使用浅拷贝就够了。 3....下面这些比较运算符重载应该是非常简单了,只需要实现一半运算符重载即可,剩余运算符利用反逻辑操作符!即可轻松实现。...流插入和流提取不适用于在内部实现,因为隐含this指针会先抢到第一个参数位置,而我们又习惯将cout作为左操作数使用,这就产生了冲突,所以我们需要将重载放到全局位置,并且我们很可能频繁使用这两个重载...起始流插入和流提取重载非常简单,本质上就是利用了库中实现实例化对象cin和cout,他们完全支持输出编译器内置类型,而所有的自定义类型实际上都是内置类型堆砌而成,我们只需要在重载中将对象内置类型一个个输出即可

    62220

    C++和对象】日期实现

    目录 前言 1.日期Date构造 2.日期Date实现 2.1获取某年某月天数 2.2默认成员函数实现 2.2.1全缺省构造函数 2.2.2拷贝构造函数 2.2.3赋值运算符重载 2.2.4...构造 这里函数大多在日期中声明,定义在外部实现 #include using namespace std; class Date { public: // 获取某年某月天数...日期计算函数 运算符重载函数 成员函数是公有的(public),也就是说我们在外部也可访问和使用;下面我们将实现这些函数。..._day; return *this; } } 赋值运算符重载如果在中不显式实现,编译器会生成一个默认。...此时用户再在外自己实现一个全局赋值运算符重载,就和编译器在中生成默认赋值运算符重载冲突了,故赋值运算符重载只能是成员函数。

    8510

    C语言---扫雷游戏实现

    1.扫雷游戏分析和设计 需要创建3个文件夹 test.c----扫雷游戏测试 game.c----扫雷游戏实现 game.h----扫雷游戏实现信息使用二维数组存放 • 使⽤控制台实现经典扫雷游戏...• 游戏可以通过菜单实现继续玩或者退出游戏 • 扫雷棋盘是9*9格⼦ • 默认随机布置10个雷 • 可以排查雷 ◦ 如果位置不是雷,就显⽰周围有⼏个雷 ◦ 如果位置是雷,就炸死游戏结束...,避免太过混乱, 越界访问会导致程序崩溃 把存放雷数组扩大一圈,防止越界,上下左右多一行和列, 1.使用两个二维数组来实现 2.如果棋盘大小是99,数组大小就给1111 因为要扩大一圈后大小就是...11*11 3.数组使用字符数组就行 2.扫雷游戏代码实现 game.h #pragma once #include //直接把头文件放在.h文件里面 #include <stdlib.h..., y);//统计个数, //将算出数量放到show数组 show[x][y] = count + '0';//转化为字符放到数组里面

    2200

    c语言 | 单链表实现

    今天分享是单链表。准确说,单链表不算是C语言内容,而是属于数据结构内容,因为它没有新知识点,只是利用了结构体和指针等知识。...但是它在C语言中应用还是很广泛,在RTOS中,也是非常多地方使用到了链表。今天暂时说一下单链表实现和简单应用,下一节当中再介绍双链表。 首先,要对单链表有个概念。...说明:在本次实验中,使用是vscode编辑器,编译环境是gcc,不建议使用VC6.0,因为VC6.0使用c语言标准太老了,很多语法都不支持,并且,VC6.0使用体验极差,没有代码高亮功能等等。...所以,推荐使用vscode编辑器,也可以使用windows自带编译器,打开cmd终端,使用gcc命令编译.c文件,生成.exe可执行文件后执行即可。...再测试其他情况,也都没有问题,说明我们代码实现了预定目标。

    2.1K30

    C语言 文件读写实现

    关于C语言文件读写,我将介绍下面这几种方式: 字符读写:使用 fgetc() 函数 和 fputc() 函数; 字符串读写:使用 fgets() 函数和 fputs() 函数; 格式化读写...字符读写: 1. fputc()函数 fputc(c,fp); //用于将一个字符写入文件 其中,fp为文件指针变量;c为要写入字符,可以是字符常量或字符型变量。...int main() { FILE *fp; //定义文件指针 char ch; //字符指针 fp=fopen("C://Users//Administrator...2. fgetc()函数 c=fgetc(fp); //用来从指定文本文件中读取一个字符。 其中,fp为文件指针,c为要写入字符。...该函数功能是从指定文件中读取一个字符,并赋值给字符型变量c。 函数返回值:读取成功,返回读取字符;读取错误或遇到结束标志EOF,返回EOF。

    1.9K10

    C语言 文件读写实现

    关于C语言文件读写,我将介绍下面这几种方式: 字符读写:使用 fgetc() 函数 和 fputc() 函数; 字符串读写:使用 fgets() 函数和 fputs() 函数; 格式化读写...字符读写: 1. fputc()函数 fputc(c,fp); //用于将一个字符写入文件 1 其中,fp为文件指针变量;c为要写入字符,可以是字符常量或字符型变量。...int main() { FILE *fp; //定义文件指针 char ch; //字符指针 fp=fopen("C://Users//Administrator...2. fgetc()函数 c=fgetc(fp); //用来从指定文本文件中读取一个字符。 1 其中,fp为文件指针,c为要写入字符。...该函数功能是从指定文件中读取一个字符,并赋值给字符型变量c。 函数返回值:读取成功,返回读取字符;读取错误或遇到结束标志EOF,返回EOF。

    1.6K10

    C语言-扫雷游戏实现

    1.扫雷游戏分析和设计 1.1扫雷游戏功能说明 • 使用控制台实现经典扫雷游戏 • 游戏可以通过菜单实现继续玩或退出游戏 • 扫雷棋盘是9*9格子 • 默认随机布置10个雷 •...可以排查雷 1.2游戏界面▶️ 初始界面 排雷界面 排雷失败界面 2.扫雷游戏代码实现 2.1数据结构分析 但是如果我们判断边缘格子位置是否含雷时, 由于周围边界没有东西,导致我们需要判断这个格子是否位于边缘位置...字符数组 是因为 只需要定义字符函数, 方便操作~ 如果 左边是整形数组,右边是字符数组 就 需要调用两个不同函数~ 在game.c中打印棋盘时候,我们只打印9*9~ 因为外边绿色空格只是为了编写变得容易一点...2.2文件结构设计 首先,先创建这三个文件. 2.3游戏过程实现,代码块 主函数,用户菜单页面代码⏸️: #define _CRT_SECURE_NO_WARNINGS #include <stdio.h...,这样子游戏设计显然不合理~ 于是,我们可以根据,雷和非雷数量关系进行排雷循环次数限制. game.h: //布置80个雷 #define EASY_COUNT 80 game.c: //排查雷

    13610

    C语言】冒泡排序实现

    冒泡排序 这次给大家分享一个C语言实现冒泡排序法 冒泡排序其实就是设计一个冒泡排序函数将一个整型数组从小到大排序....例如一个数组arr[10] = {1,5,2,3,6,7,9,8,4,10},要想数组从小到大排序,就要让数组里面每两个相邻元素比较,所以我们需要写一个循环进行两两比较;而这个过程又需要循环sz -...1次(sz为数组元素个数),即冒泡趟数,让这个比较过程从头开始....下面来看代码分析: void Sort(int arr[],int sz) { //确定冒泡趟数 int i = 0; for (i = 0; i < sz - 1; i++) {...;每当进入if条件就代表本趟排序数据不完全有序,所以会将flag = 0;当某一趟数组已经有序,就不会进入if条件,即本趟数组已经有序,跳出循环,在某个程度上也提高了代码效率.

    12210

    C++实战——日期实现

    一、日期 本文实现基于往期文章学过内容 概念 日期是一种用于表示日期数据类型。它通常包含年、月、日等成员变量,以及一些用于操作日期方法。...计算器和时钟功能:日期可以用于实现计算器和时钟功能,例如在计算器应用程序中,可以使用日期来进行日期和时间计算和显示。...关于里重载比较运算符为什么要加外部const 在C++中,比较运算符重载通常需要将其定义为成员函数。在重载比较运算符时,我们需要考虑到两个方面: 在比较运算符重载中,我们不希望修改成员变量。...示例 const Date d1(2024,4,11); d1< d2 会报错,是因为this指针在里是Date* const this修饰C++中,成员函数有一个隐含指向当前对象指针...如果允许将常量对象传递给非常量指针,就会破坏常量对象只读属性。为了确保对象常量性,C++编译器会报错。 所以,this指针接受一个常量会报错。

    8610

    C++】string模拟实现

    文章目录 一、string构造、拷贝构造、赋值重载以及析构 1.构造函数 2.拷贝构造 3.swap问题 4.赋值重载 5.析构函数 二、常用接口 1.c_str 2.[] 3.迭代器和范围for...要指定作用域std::,否则需要从局部找,再去全局找,发现参数不匹配 4.赋值重载 默认生成赋值重载也会导致浅拷贝,所以我们需要实现深拷贝。...,静态成员变量要在外定义: size_t string::npos = -1 普通成员对象可以给缺省值,在构造函数初始化列表完成初始化,但是静态成员变量不会在初始化列表阶段进行初始化,静态成员变量不属于某个具体对象...,属于整个,所以需要在外初始化。...; ++i) { out << s[i]; } return out; } 对于<<和c_str()区别:<<按照size进行打印,跟\0没有关系,而c_str()遇到\0结束

    72430

    C++初阶-Date实现

    C++Date实现 零、前言 一、Date相关接口 二、具体接口函数实现 1、获取月份天数 2、Date打印 3、Date构造函数 4、Date析构函数 5、Date拷贝构造函数 6、Date赋值重载函数...+和对象基本知识以及六个默认成员函数后,我们可以上手实现一个Date出来,检验学习效果。...注意: 因为对于定义在里面的函数会自动设成内联函数,而只有一些简单函数才建议设成内联函数,所以实现函数时我们是声明和定义分离(在里面声明,外定义) 在实现函数接口需要加上域名称...注意: 对于构造函数建议写成全缺省函数(便于无参数初始化),但是只能定义和声明其中一个写缺省 考虑初始化日期是否合理 实现代码: //构造函数 //里声明 Date(int year...) 虽然定义成外函数能修改参数位置,但是无法访问私有成员变量,这里我们使用友元函数来解决,即在里声明函数前加上friend,便可以访问成员 实现代码: //输出操作符重载 ostream

    39420

    C++】string模拟实现

    string修改模块儿中yyds函数,我们也只实现两个最常用版本,参数分别为字符和字符串版本。 在已实现push_back和append情况下,我们直接进行函数复用即可。...,则成员变量会利用C++11缺省值在构造函数初始化列表进行初始化 const static size_t npos = -1; //静态成员变量在中声明,定义必须在外面,因为它属于整个...() c_str是C++为了兼容C语言增加一个接口,其作用就是返回string对象成员变量,也就是char *指针。...// //in >> ch; ch = in.get();//C++get()和C语言getchar()功能是一样,都是获取缓冲区字符 } //方法1.reserve解决方案 //...在实现内部,我们利用+=来进行string对象字符尾插。

    62520
    领券