數據結構探險系列—棧篇-學習筆記

數據結構探險—棧篇

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

棧是一種機制:后進先出 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.pswp.cn/news/394247.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/394247.shtml
英文地址,請注明出處:http://en.pswp.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;我們將其稱為一座…