数据结构探险系列—栈篇-学习笔记

数据结构探险—栈篇

什么是栈?
古代栈就是牲口棚的意思。

栈是一种机制:后进先出 LIFO(last in first out)

电梯

栈要素

空栈。栈底,栈顶。没有元素的时候,栈顶和栈底指向同一个元素,如果加入新元素,栈顶不断升高。取出数据时栈顶不断地降低。栈顶和栈底都称之为栈要素。

  • 通过demo说明栈的基本原理
  • 热身运动-进制转换:十进制转换到二进制,八进制,十六进制
N = (N div d) * d + N mod d
  • 步步为营- 括号匹配检测:检测一个字符串中的各种括号是否匹配
[()]  [()()]  [()[()]]

实例介绍

栈要求

mystack.h:

#ifndef MYSTACK_H
#define MYSTACK_H
class MyStack
{
public:MyStack(int size);      //分配内存初始化栈空间,设定栈容量,栈顶~MyStack();             //回收栈空间内存bool stackEmpty();      //判断栈是否为空bool stackFull();       //判断栈是否为满void clearStack();      //清空栈int stackLength();      //栈中元素的个数bool push(char elem);   //将元素压入栈中,栈顶上升bool pop(char &elem);   //将元素推出栈,栈顶下降void stackTraverse(bool isFromButtom);  //遍历栈中元素并输出
private:int m_iTop;             //栈顶,栈中元素个数int m_iSize;            //栈容量char *m_pBuffer;        //栈空间指针
};#endif

mystack.cpp:

#include "Mystack.h"
#include <iostream>
using namespace std;MyStack::MyStack(int size)
{m_iSize = size;m_pBuffer = new char[size];m_iTop = 0;
}
MyStack::~MyStack()
{delete[]m_pBuffer;m_pBuffer = NULL;}
bool MyStack::stackEmpty()
{if (m_iTop == 0)//if(0 == m_iTop){return true;}else{return false;}
}
bool MyStack::stackFull()
{if ( m_iTop == m_iSize)//>={return true;}else{return false;}
}void MyStack::clearStack()
{m_iTop = 0;//原栈中所有值无效
}int MyStack::stackLength()
{return m_iTop;
}bool MyStack::push(char elem)//放入栈顶
{if (stackFull()){return false;}m_pBuffer[m_iTop] = elem;m_iTop++;return true;
}
bool MyStack::pop(char &elem)
{if (stackEmpty()){return false;}m_iTop--;//因为入栈时做了++,使栈顶指向下一个空位置elem = m_pBuffer[m_iTop];return true;
}//char MyStack::pop()
//{
//  if (stackEmpty())
//  {
//      throw 1;
//  }
//  else
//  {
//      m_iTop--;
//      return m_pBuffer[m_iTop];
//  }
//}void MyStack::stackTraverse(bool isFromButtom)
{if (isFromButtom){for (int i = 0; i < m_iTop; i++){cout << m_pBuffer[i] << ",";}}else{for (int i = m_iTop - 1; i >= 0; i--){cout << m_pBuffer[i] << ",";}}}

main.cpp:

#include "Mystack.h"
#include <iostream>
#include <stdlib.h>
using namespace std;
int main(void)
{MyStack *pStack = new MyStack(5);pStack->push('h');//底pStack->push('e');pStack->push('l');pStack->push('l');pStack->push('o');//顶pStack->stackTraverse(true);char elem = 0;pStack->pop(elem);cout << endl;cout << elem << endl;//pStack->clearStack();pStack->stackTraverse(false);cout << pStack->stackLength() << endl;if (pStack->stackEmpty()){cout << "栈为空" << endl;}if (pStack->stackFull()){cout << "栈为满" << endl;}delete pStack;pStack = NULL;system("pause");return 0;
}

运行结果:

栈运行结果

案例改造。

要求:


栈改造要求
#ifndef MYSTACK_H
#define MYSTACK_H
#include "Coordinate.h"
class MyStack
{
public:MyStack(int size);      //分配内存初始化栈空间,设定栈容量,栈顶~MyStack();             //回收栈空间内存bool stackEmpty();      //判断栈是否为空bool stackFull();       //判断栈是否为满void clearStack();      //清空栈int stackLength();      //栈中元素的个数bool push(Coordinate elem); //将元素压入栈中,栈顶上升bool pop(Coordinate &elem); //将元素推出栈,栈顶下降void stackTraverse(bool isFromButtom);  //遍历栈中元素并输出
private:int m_iTop;             //栈顶,栈中元素个数int m_iSize;            //栈容量Coordinate *m_pBuffer;      //栈空间指针
};
#endif#include "Mystack.h"
#include <iostream>
using namespace std;MyStack::MyStack(int size)
{m_iSize = size;m_pBuffer = new Coordinate[size];m_iTop = 0;
}
MyStack::~MyStack()
{delete[]m_pBuffer;m_pBuffer = NULL;}
bool MyStack::stackEmpty()
{if (m_iTop == 0)//if(0 == m_iTop){return true;}else{return false;}
}
bool MyStack::stackFull()
{if ( m_iTop == m_iSize)//>={return true;}else{return false;}
}void MyStack::clearStack()
{m_iTop = 0;//原栈中所有值无效
}int MyStack::stackLength()
{return m_iTop;
}bool MyStack::push(Coordinate elem)//放入栈顶
{if (stackFull()){return false;}m_pBuffer[m_iTop] = elem;//因为这里的coordinate是一个简单的复制。所以使用默认拷贝函数就可以了m_iTop++;return true;
}
bool MyStack::pop(Coordinate &elem)
{if (stackEmpty()){return false;}m_iTop--;//因为入栈时做了++,使栈顶指向下一个空位置elem = m_pBuffer[m_iTop];return true;
}//char MyStack::pop()
//{
//  if (stackEmpty())
//  {
//      throw 1;
//  }
//  else
//  {
//      m_iTop--;
//      return m_pBuffer[m_iTop];
//  }
//}void MyStack::stackTraverse(bool isFromButtom)
{if (isFromButtom){for (int i = 0; i < m_iTop; i++){//cout << m_pBuffer[i] << ",";m_pBuffer[i].printCoordinate();}}else{for (int i = m_iTop - 1; i >= 0; i--){//cout << m_pBuffer[i] << ",";m_pBuffer[i].printCoordinate();}}}
#ifndef COORDINATE_H
#define COORDINATE_H
class Coordinate
{
public:Coordinate(int x=0,int y=0);void printCoordinate();
private:int m_iX;int m_iY;
};
#endif#include "Coordinate.h"
#include <iostream>
using namespace std;Coordinate::Coordinate(int x, int y)
{m_iX = x;m_iY = y;
}
void Coordinate::printCoordinate()
{cout << "(" << m_iX << "," << m_iY << ")" << endl;
}

main.cpp:

#include "Mystack.h"
#include <iostream>
#include <stdlib.h>
using namespace std;
int main(void)
{MyStack *pStack = new MyStack(5);pStack->push(Coordinate(1,2));//底pStack->push(Coordinate(3, 4));pStack->stackTraverse(true);pStack->stackTraverse(false);cout << pStack->stackLength() << endl;delete pStack;pStack = NULL;system("pause");return 0;
}

运行结果:

改造后运行结果

经过改造我们使栈满足了coordinate对象的入栈出栈。

将普通栈改为类模板栈。使其可以适用于任何数据类型

类模板栈实现要求

上面我们实现过两遍对于栈的实现。一次是实现char数组的栈。一次是实现coordinate对象的。两次除过数据类型。差别不是很大。所以本次我们使用类模板实现适用任何数据类型的栈

mystack.h:(因为编译器不支持类模板分开编译。所以cpp为空)

#ifndef MYSTACK_H
#define MYSTACK_H
#include <iostream>
using namespace std;
template <typename T>
class MyStack
{
public:MyStack(int size);      //分配内存初始化栈空间,设定栈容量,栈顶~MyStack();             //回收栈空间内存bool stackEmpty();      //判断栈是否为空bool stackFull();       //判断栈是否为满void clearStack();      //清空栈int stackLength();      //栈中元素的个数bool push(T elem);  //将元素压入栈中,栈顶上升bool pop(T &elem);  //将元素推出栈,栈顶下降void stackTraverse(bool isFromButtom);  //遍历栈中元素并输出
private:int m_iTop;             //栈顶,栈中元素个数int m_iSize;            //栈容量T *m_pBuffer;       //栈空间指针
};template <typename T>
MyStack<T>::MyStack(int size)
{m_iSize = size;m_pBuffer = new T[size];m_iTop = 0;
}
template <typename T>
MyStack<T>::~MyStack()
{delete[]m_pBuffer;m_pBuffer = NULL;}
template <typename T>
bool MyStack<T>::stackEmpty()
{if (m_iTop == 0)//if(0 == m_iTop){return true;}else{return false;}
}
template <typename T>
bool MyStack<T>::stackFull()
{if (m_iTop == m_iSize)//>={return true;}else{return false;}
}
template <typename T>
void MyStack<T>::clearStack()
{m_iTop = 0;//原栈中所有值无效
}
template <typename T>
int MyStack<T>::stackLength()
{return m_iTop;
}
template <typename T>
bool MyStack<T>::push(T elem)//放入栈顶
{if (stackFull()){return false;}m_pBuffer[m_iTop] = elem;//因为这里的coordinate是一个简单的复制。所以使用默认拷贝函数就可以了m_iTop++;return true;
}
template <typename T>
bool MyStack<T>::pop(T &elem)
{if (stackEmpty()){return false;}m_iTop--;//因为入栈时做了++,使栈顶指向下一个空位置elem = m_pBuffer[m_iTop];return true;
}//char MyStack::pop()
//{
//  if (stackEmpty())
//  {
//      throw 1;
//  }
//  else
//  {
//      m_iTop--;
//      return m_pBuffer[m_iTop];
//  }
//}
template <typename T>
void MyStack<T>::stackTraverse(bool isFromButtom)
{if (isFromButtom){for (int i = 0; i < m_iTop; i++){cout << m_pBuffer[i];//m_pBuffer[i].printCoordinate();}}else{for (int i = m_iTop - 1; i >= 0; i--){cout << m_pBuffer[i];//m_pBuffer[i].printCoordinate();}}}
#endif
#ifndef COORDINATE_H
#define COORDINATE_H
#include <ostream>
using namespace std;
class Coordinate
{friend ostream &operator<<(ostream &out, Coordinate &coor);
public:Coordinate(int x=0,int y=0);void printCoordinate();
private:int m_iX;int m_iY;
};
#endif#include "Coordinate.h"
#include <iostream>
using namespace std;Coordinate::Coordinate(int x, int y)
{m_iX = x;m_iY = y;
}
void Coordinate::printCoordinate()
{cout << "(" << m_iX << "," << m_iY << ")" << endl;
}ostream &operator<<(ostream &out, Coordinate &coor)
{out << "(" << coor.m_iX << "," << coor.m_iY << ")" << endl;return out;
}

main.cpp:

#include "Mystack.h"
#include <iostream>
#include <stdlib.h>
#include "Coordinate.h"
using namespace std;
int main(void)
{MyStack<Coordinate> *pStack = new MyStack<Coordinate>(5);pStack->push(Coordinate(1,2));//底pStack->push(Coordinate(3, 4));pStack->stackTraverse(true);pStack->stackTraverse(false);cout << pStack->stackLength() << endl;MyStack<char> *pStack2 = new MyStack<char>(5);pStack2->push('h');//底pStack2->push('e');pStack2->push('l');pStack2->push('l');pStack2->push('o');//顶pStack2->stackTraverse(true);delete pStack;pStack = NULL;system("pause");return 0;
}
类模板栈运行结果

可以看到我们的类模板已经将栈改造成了通用数据类型的栈。

栈应用-进制转换

进制转换

短除法。不停除以进制数。保留余数。然后商继续除以进制保留余数。直到商为0
栈的应用:将每次的余数4 0 5 2 入栈。然后从栈顶开始打印。

#ifndef MYSTACK_H
#define MYSTACK_H
#include <iostream>
using namespace std;
template <typename T>
class MyStack
{
public:MyStack(int size);      //分配内存初始化栈空间,设定栈容量,栈顶~MyStack();             //回收栈空间内存bool stackEmpty();      //判断栈是否为空bool stackFull();       //判断栈是否为满void clearStack();      //清空栈int stackLength();      //栈中元素的个数bool push(T elem);  //将元素压入栈中,栈顶上升bool pop(T &elem);  //将元素推出栈,栈顶下降void stackTraverse(bool isFromButtom);  //遍历栈中元素并输出
private:int m_iTop;             //栈顶,栈中元素个数int m_iSize;            //栈容量T *m_pBuffer;       //栈空间指针
};template <typename T>
MyStack<T>::MyStack(int size)
{m_iSize = size;m_pBuffer = new T[size];m_iTop = 0;
}
template <typename T>
MyStack<T>::~MyStack()
{delete[]m_pBuffer;m_pBuffer = NULL;}
template <typename T>
bool MyStack<T>::stackEmpty()
{if (m_iTop == 0)//if(0 == m_iTop){return true;}else{return false;}
}
template <typename T>
bool MyStack<T>::stackFull()
{if (m_iTop == m_iSize)//>={return true;}else{return false;}
}
template <typename T>
void MyStack<T>::clearStack()
{m_iTop = 0;//原栈中所有值无效
}
template <typename T>
int MyStack<T>::stackLength()
{return m_iTop;
}
template <typename T>
bool MyStack<T>::push(T elem)//放入栈顶
{if (stackFull()){return false;}m_pBuffer[m_iTop] = elem;//因为这里的coordinate是一个简单的复制。所以使用默认拷贝函数就可以了m_iTop++;return true;
}
template <typename T>
bool MyStack<T>::pop(T &elem)
{if (stackEmpty()){return false;}m_iTop--;//因为入栈时做了++,使栈顶指向下一个空位置elem = m_pBuffer[m_iTop];return true;
}//char MyStack::pop()
//{
//  if (stackEmpty())
//  {
//      throw 1;
//  }
//  else
//  {
//      m_iTop--;
//      return m_pBuffer[m_iTop];
//  }
//}
template <typename T>
void MyStack<T>::stackTraverse(bool isFromButtom)
{if (isFromButtom){for (int i = 0; i < m_iTop; i++){cout << m_pBuffer[i];//m_pBuffer[i].printCoordinate();}}else{for (int i = m_iTop - 1; i >= 0; i--){cout << m_pBuffer[i];//m_pBuffer[i].printCoordinate();}}}
#endif#include "Mystack.h"
#include <iostream>
#include <stdlib.h>
using namespace std;#define BINARY 2
#define OCTONARY 8
#define HEXADECIMAL 16int main(void)
{MyStack<int> *pStack = new MyStack<int>(30);int N = 1348;int mod = 0;while (N !=0){mod = N % BINARY;pStack->push(mod);N = N / BINARY;}pStack->stackTraverse(false);delete pStack;pStack = NULL;system("pause");return 0;
}

二进制和8进制都没有问题了,16进制还需要进一步改造。

运行结果:

!运行结果](http://upload-images.jianshu.io/upload_images/1779926-c6c62f86ff27da42.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

16进制改造

mystack.h与原来一致。

#include "Mystack.h"
#include <iostream>
#include <stdlib.h>
using namespace std;#define BINARY 2
#define OCTONARY 8
#define HEXADECIMAL 16int main(void)
{char num[] = "0123456789ABCDEF";MyStack<char> *pStack = new MyStack<char>(30);int N = 2016;int mod = 0;while (N !=0){mod = N % HEXADECIMAL;pStack->push(num[mod]);N = N / HEXADECIMAL;}pStack->stackTraverse(false);/*for (int i=pStack->stackLength()-1;i>=0;i--){num[pStack[i]]}*//*int elem = 0;while (!pStack->stackEmpty()){pStack->pop(elem);cout << num[elem];}*/delete pStack;pStack = NULL;system("pause");return 0;
}

如果仍使栈为int型。则可以使用注释部分打印出内容。修改为char之后。可使用
pStack->push(num[mod]);

栈应用括号匹配

括号匹配

从前往后扫描。左方括号入栈,左圆括号入栈,当遇到右括号则左圆括号出栈。当遇到右方括号,左方括号出栈。字符串扫描完毕时栈为空则全部匹配。栈中还有东西则不是全部匹配

#include "Mystack.h"
#include <iostream>
#include <stdlib.h>
using namespace std;int main(void)
{MyStack<char> *pStack = new MyStack<char>(30);//已存入的字符MyStack<char> *pNeedStack = new MyStack<char>(30);//需要的字符。char str[] = "[()]]";char currentNeed = 0;for (int i=0;i<strlen(str);i++){if (str[i] != currentNeed)//如果此时扫描到的字符不是我们所需要的。{pStack->push(str[i]);//那么将这个字符存入“已存入字符”switch (str[i])//对于这个字符,生成它的currentneed{case '[':if (currentNeed !=0)//如果currentneed已经有值,不为初值。{pNeedStack->push(currentNeed);//将当前的需要字符入栈。}currentNeed = ']';//生成当前需要。break;case  '(':if (currentNeed != 0){pNeedStack->push(currentNeed);}currentNeed = ')';break;default:cout << "字符串不匹配" << endl;system("pause");return 0;}}else{char elem;pStack->pop(elem);if (pNeedStack->pop(currentNeed)){currentNeed = 0;}}}if (pStack->stackEmpty()){cout << "字符串括号匹配" << endl;}delete pStack;pStack = NULL;delete pNeedStack;pNeedStack = NULL;system("pause");return 0;
}

运行过程:

最开始:currentneed为0.

  • str[0]为"[",此时需要的currentneed为0,不相等。
  • 进入if内部。将"[" 存入栈1。进入switch的case内部。匹配到case:"["
  • 此时判断到当前的currentneed = 0.不满足if。则生成currentneed "]"。并break
    出循环。
  • str[1]为"(",此时需要的currentneed是"]",不相等。
  • 进入if内部将"("存入栈1.进入switch的case内部。匹配到case:"("
  • 此时判断到当前的currentneed ="]"不等于0.将该字符存入需要栈,因为下面就要对他进行覆盖了、
  • 生成新的的currentneed")",并break出循环
  • str[2]为")",正好与我们当前的currentneed一致。
  • 那么我们将栈一的"("弹出。并将needstack里的上一个急需的赋值给currentneed。
  • 进入下一次循环。

也就是currentneed变量里面存放的是当前下一次循环刚开始急需匹配的。
need栈里存放的是历史需要的。

当当前需要的和正在扫描的一致。则将栈1中出栈。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/394247.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MYSQL远程登录权限设置 ,可以让Navicat远程连接服务器的数据库

Mysql默认关闭远程登录权限&#xff0c;如下操作允许用户在任意地点登录&#xff1a;1. 进入mysql&#xff0c;GRANT ALL PRIVILEGES ON *.* TO root% IDENTIFIED BY WITH GRANT OPTION;IDENTIFIED BY后跟的是密码&#xff0c;可设为空。2. FLUSH privileges; 更新Mysql为了安…

time series 时间序列 | fractional factorial design 部分要因试验设计

作业&#xff1a; 1) A plot of data from a time series, which shows a cyclical pattern – please show a time series plot and identify the length of the major cycle. 2) Data from a full factorial or fractional factorial experiment with at least 2 factors –…

如何在Go中编写防弹代码:不会失败的服务器工作流程

by Tal Kol通过塔尔科尔 如何在Go中编写防弹代码&#xff1a;不会失败的服务器工作流程 (How to write bulletproof code in Go: a workflow for servers that can’t fail) From time to time you may find yourself facing a daunting task: building a server that really …

越狱第一至五季/全集迅雷下载

越狱 第一季 Prison Break Season 1 (2005) 本季看点&#xff1a;迈克尔斯科菲尔德是一头陷于绝境欲拼死一搏的怒狮——他的哥哥林肯巴罗斯被认定犯有谋杀罪被投入了福克斯河监狱的死囚牢。虽然所有的证据都指出林肯就是凶手&#xff0c;迈克尔坚信兄长是无辜的。林肯的死刑执行…

leetcode面试题 16.19. 水域大小(深度优先搜索)

你有一个用于表示一片土地的整数矩阵land&#xff0c;该矩阵中每个点的值代表对应地点的海拔高度。若值为0则表示水域。由垂直、水平或对角连接的水域为池塘。池塘的大小是指相连接的水域的个数。编写一个方法来计算矩阵中所有池塘的大小&#xff0c;返回值需要从小到大排序。 …

java -jar 默认参数_JAVA入门学习指南,建议收藏

如果你不懂Java 并且想认真学习接触了解一下Java的语法&#xff0c;建议把这篇文章收藏了&#xff0c;多看几遍&#xff0c;应该可以初步掌握Java 大部分基础的语法 。 让我们出发吧&#xff01;ps:本文有点长&#xff0c;耐心阅读 。〇&#xff0c;编程环境工程项目推荐使用ID…

【RabbitMQ】 WorkQueues

消息分发 在【RabbitMQ】 HelloWorld中我们写了发送/接收消息的程序。这次我们将创建一个Work Queue用来在多个消费者之间分配耗时任务。 Work Queues&#xff08;又称为&#xff1a;Task Queues&#xff09;的主要思想是&#xff1a;尽可能的减少执行资源密集型任务时的等待时…

python matplotlib库安装出错_使用pip install Matplotlib时出现内存错误

我使用的是Python2.7&#xff0c;如果我试图安装Matplotlib&#xff0c;如果我使用“pip install Matplotlib”&#xff0c;就会出现这个错误Exception:Traceback (most recent call last):File "/usr/local/lib/python2.7/dist-packages/pip/basecommand.py", line …

笑看职场什么程序员才抢手,什么样的程序员涨薪多?

​程序员&#xff0c;怎么才算合格&#xff0c;不好说吧&#xff1b;他就像销售一样&#xff0c;一名销售员&#xff0c;比如网络销售卖茶叶&#xff0c;他卖茶叶很厉害呀&#xff0c;可是你让他去销售房地产&#xff0c;就算他有点销售的基础&#xff0c;也要重新去学怎么销售…

Android画布Canvas裁剪clipRect,Kotlin

Android画布Canvas裁剪clipRect&#xff0c;Kotlin private fun mydraw() {val originBmp BitmapFactory.decodeResource(resources, R.mipmap.pic).copy(Bitmap.Config.ARGB_8888, true)val newBmp Bitmap.createBitmap(originBmp.width, originBmp.height, Bitmap.Config.A…

调查|73%的公司正使用存在漏洞的超期服役设备

本文讲的是调查&#xff5c;73%的公司正使用存在漏洞的超期服役设备&#xff0c;一份新近的调查覆盖了北美350家机构的212000台思科设备。结果显示&#xff0c;73%的企业正在使用存在漏洞、超期服役的网络设备。该数字在上一年仅为60%。 Softchoice公司思科部门业务主管大卫魏格…

为什么要做稀疏编码_为什么我每天都要编码一年,所以我也学到了什么,以及如何做。...

为什么要做稀疏编码by Paul Rail由Paul Rail 为什么我每天都要编码一年&#xff0c;所以我也学到了什么&#xff0c;以及如何做。 (Why I coded every day for a year, what I learned, and how you can do it, too.) I was looking to switch careers. The world today is no…

深度装机大师一键重装_笔记本怎么重装系统?笔记本自己如何重装系统?

如何给笔记本重装系统呢?笔记本系统使用时间长了难免会运行缓慢&#xff0c;我们第一反应就是重装系统笔记本了。但是很多小白用户们就惆怅了&#xff0c;不知道笔记本怎么重装系统&#xff0c;怎么进行重装系统笔记本呢?首先&#xff0c;笔记本电脑可以重置系统&#xff0c;…

leetcode剑指 Offer 11. 旋转数组的最小数字(二分查找)

把一个数组最开始的若干个元素搬到数组的末尾&#xff0c;我们称之为数组的旋转。输入一个递增排序的数组的一个旋转&#xff0c;输出旋转数组的最小元素。例如&#xff0c;数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转&#xff0c;该数组的最小值为1。 示例 1&#xff1a; 输…

XMLHttpRequest状态码及相关事件

1.创建一个XMLHttpRequest对象 2.对XMLHttpRequest对象进行事件的监听(定义监听事件的位置不影响 3.对XMLHttpRequest对象的状态码 状态 名称描述0Uninitialized初始化状态。XMLHttpRequest 对象已创建或已被 abort() 方法重置1Open open() 方法已调用&#xff0c;但是 send()…

-code vs 1474 十进制转m进制

1474 十进制转m进制 时间限制: 1 s空间限制: 128000 KB题目等级 : 白银 Silver题解查看运行结果题目描述 Description将十进制数n转换成m进制数 m<16 n<100 输入描述 Input Description共一行 n和m 输出描述 Output Description共一个数 表示n的m进制 样例输入 Sample In…

人工智能时代号角已吹响 COMPUTEX如何凝聚AI这股力量?

当前谈到人工智能&#xff08;AI&#xff09;&#xff0c;或许大家最直接的反应是Google的AlphaGo&#xff0c;但比起“遥不可及”的围棋机器人&#xff0c;其实AI早就融入人们生活&#xff0c;就像苹果手机中的语音助手Siri&#xff0c;如此“平易近人”。从自动驾驶、机器人、…

python写入文字到txt只写入最后一行_python文件写入:向txt写入内容的设置

创建文本流的最简单方法是使用 open(),可以选择指定编码: f=open("myfile.txt","r",encoding="utf-8") 但是更为安全的方法是: with open("myfile.txt","w",encoding="utf-8") as f: f.write(str) 还可以设置…

python自带ide和pycharm哪个好_排名前三的Python IDE你选择哪个?我选PyCharm

世界上最好的 Python 编辑器或 IDE 是什么&#xff1f;炫酷的界面、流畅的体验&#xff0c;我们投 PyCharm一票&#xff0c;那么你呢&#xff1f;编辑Python程序&#xff0c;您有许多选项。有些人仍然喜欢一个基本的文本编辑器&#xff0c;如Emacs&#xff0c;VIM或Gedit&#…

leetcode1254. 统计封闭岛屿的数目(dfs)

有一个二维矩阵 grid &#xff0c;每个位置要么是陆地&#xff08;记号为 0 &#xff09;要么是水域&#xff08;记号为 1 &#xff09;。 我们从一块陆地出发&#xff0c;每次可以往上下左右 4 个方向相邻区域走&#xff0c;能走到的所有陆地区域&#xff0c;我们将其称为一座…