棧和隊(duì)列上機(jī)實(shí)驗(yàn)
1.要求
??1.利用棧的基本操作實(shí)現(xiàn)將任意一個十進(jìn)制整數(shù)轉(zhuǎn)化為R進(jìn)制整數(shù)。
??2.利用循環(huán)隊(duì)列實(shí)現(xiàn).約瑟夫環(huán)問題:已知n個人(以編號1,2,3…n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報(bào)數(shù),數(shù)到k的那個人出圈;他的下一個人又從1開始報(bào)數(shù),數(shù)到k的那個人出圈;依此規(guī)律重復(fù)下去,直到圓桌周圍的人只剩最后一個。模擬該游戲,并輸出出圈順序。
????????????
2.棧的實(shí)現(xiàn)(以順序棧為例)
??棧的基本概念:
??棧(stack)是一種數(shù)據(jù)結(jié)構(gòu),它是一種只能在一端進(jìn)行插入和刪除操作的特殊線性表。這一端被稱為棧頂,相對地,把另一端稱為棧底。向一個棧插入新元素又稱作進(jìn)棧、入?;驂簵#前研略胤诺綏m斣氐纳厦?,使之成為新的棧頂元素;從一個棧刪除元素又稱作出?;蛲藯?,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。
??
??棧的基本結(jié)構(gòu)和初始化:
??我們定義了一個名為Stack的模板類
,用于實(shí)現(xiàn)可以存儲各種數(shù)據(jù)類型
的棧的數(shù)據(jù)結(jié)構(gòu)。我們創(chuàng)建了三個Stack的成員函數(shù):_base、_top 和 _size。
??_base: 它作為動態(tài)分配的棧內(nèi)存的起始位置。
??_top:表示棧頂?shù)奈恢谩?/strong> 在構(gòu)造函數(shù)中,它被初始化為指向InitStackSize個新分配的SElemType元素的數(shù)組的末尾。
??_size: 是一個整數(shù),用于表示棧的當(dāng)前大小,即棧中元素的數(shù)量。 在構(gòu)造函數(shù)中,它被初始化為InitStackSize。
??構(gòu)造函數(shù): Stack()函數(shù)負(fù)責(zé)初始化這個棧。 它首先為_base和_top分配InitStackSize個SElemType大小的內(nèi)存,并將_size設(shè)置為InitStackSize。
??析構(gòu)函數(shù): ~Stack()函數(shù)負(fù)責(zé)清理和釋放由Stack對象持有的內(nèi)存。 它首先刪除_base指向的數(shù)組,然后將_base和_top設(shè)置為0,將_size設(shè)置為0。這是為了確保在對象銷毀后,不會錯誤地引用任何內(nèi)存地址。
??注意:數(shù)據(jù)結(jié)構(gòu)的的實(shí)現(xiàn)是很靈活的,對于棧而言,順序結(jié)構(gòu)和鏈?zhǔn)浇Y(jié)構(gòu)都可以實(shí)現(xiàn),當(dāng)然,_base,_top等成員變量也可以設(shè)計(jì)成整型或者是指針,只要滿足該數(shù)據(jù)類型的特征,就都可以設(shè)計(jì)。
template<class T>
class Stack
{
//構(gòu)造函數(shù)
Stack()
{
_base = _top = new SElemType[InitStackSize];
_size = InitStackSize;
}
//析構(gòu)函數(shù)
~Stack()
{
delete[] _base;
_top = _base = nullptr;
_size = 0;
}
private:
SElemType* _base, * _top;
int _size;
};
??
??入棧和擴(kuò)容操作:
??我們現(xiàn)在實(shí)現(xiàn)棧最基本的入棧操作,首先創(chuàng)建一個Push函數(shù),它用于將一個元素壓入棧中
。如果棧滿了,它會進(jìn)行擴(kuò)容操作。
??如果 _top 指針和 _base 指針之間的距離等于 _size(這意味著棧已經(jīng)滿了),那么將進(jìn)行擴(kuò)容操作。擴(kuò)容操作包括創(chuàng)建一個新的數(shù)組(大小為原數(shù)組的兩倍),然后復(fù)制原數(shù)組的元素到新數(shù)組中。 最后,更新 _base 指針指向新數(shù)組,_top 指針指向新數(shù)組的末尾,_size 變?yōu)樾聰?shù)組的大小。
??入棧操作,如果棧沒有滿,那么將 val 的值賦給 _top 指針?biāo)赶虻奈恢?,并?_top 指針向前移動一位。 最后,_size 加一。
void Push(const SElemType& val)
{
//棧滿,擴(kuò)容
if (_top - _base == _size)
{
//轉(zhuǎn)移棧中的元素
SElemType* newbase = new SElemType[_size * 2];
for (int i = 0; i < _size; i++)
{
newbase[i] = _base[i];
}
//刪除原來?xiàng)V性?/span>
delete[] _base;
_base = newbase;
_top = newbase + _size;
_size *= 2;
}
//入棧操作
*_top = val;
_top++;
_size++;
}
??
??出棧操作:
??我們現(xiàn)在實(shí)現(xiàn)出棧操作,先創(chuàng)建一個名為Pop的函數(shù),用于從棧中刪除并返回棧頂元素。
??函數(shù)聲明:Pop(SElemType& e) 是一個函數(shù),它接受一個類型為 SElemType 的引用作為參數(shù),命名為 e。引用的使用意味著我們可以在函數(shù)內(nèi)部修改傳入的參數(shù),而不僅僅是它的副本。
??棧檢查:在函數(shù)體中,首先檢查棧的大?。╛size),如果為0,說明棧是空的。 此時,會打印一條消息 ‘該棧為空,無法刪除\n’ 并結(jié)束函數(shù)。出棧操作:如果棧非空,我們執(zhí)行出棧操作。首先,將棧頂元素的值賦給參數(shù) e。然后,將 _top 指針向前移動一位(即向下移動到棧頂元素的前一個位置),因?yàn)槲覀円呀?jīng)取出了棧頂元素。最后,_size 減一,因?yàn)闂V猩倭艘粋€元素。
??這樣,Pop 函數(shù)就能夠從棧中刪除并返回棧頂元素,同時還能處理空棧的情況。
void Pop(SElemType& e)
{
if (_size == 0)
{
cout << "該棧為空,無法刪除\n";
return;
}
//出棧操作
e = *_top;
_top--;
_size--;
}
??棧測試:
????????????
3.隊(duì)列的實(shí)現(xiàn)(以順序隊(duì)列為例)
??隊(duì)列的基本概念:
??隊(duì)列是一種特殊的線性表,它只允許在表的前端(front)進(jìn)行刪除操作,而在表的后端(rear)進(jìn)行插入操作。 和棧一樣,隊(duì)列是一種操作受限制的線性表。進(jìn)行插入操作的端稱為隊(duì)尾,進(jìn)行刪除操作的端稱為隊(duì)頭。
??
??隊(duì)列的基本結(jié)構(gòu)和初始化:
??我們定義了一個名為Queue的C++模板類,用于實(shí)現(xiàn)可以存儲不同數(shù)據(jù)類型的隊(duì)列數(shù)據(jù)結(jié)構(gòu)。我們創(chuàng)建了四個成員變量:
??_base:這是一個指向隊(duì)列元素的指針。
??_front:這是隊(duì)列的頭部索引。
??_rear:這是隊(duì)列的尾部索引。
??_capacity:這是隊(duì)列的容量。
??構(gòu)造函數(shù):Queue的構(gòu)造函數(shù)初始化了隊(duì)列的基礎(chǔ)元素?cái)?shù)組。將隊(duì)列的前端和后端索引設(shè)為0,并將隊(duì)列的容量設(shè)為 ‘QueueSize’。這個 ‘QueueSize’ 應(yīng)該是在類外部定義的常數(shù),表示隊(duì)列的最大容量。
??析構(gòu)函數(shù):當(dāng) Queue 對象被銷毀時,析構(gòu)函數(shù)將被調(diào)用。 這個析構(gòu)函數(shù)刪除了隊(duì)列的基礎(chǔ)元素?cái)?shù)組,將 _base 設(shè)為 nullptr,將隊(duì)列的前端和后端索引設(shè)為0,并將隊(duì)列的容量設(shè)為0。這是為了釋放隊(duì)列占用的內(nèi)存,并重置隊(duì)列的狀態(tài)。
template<class T>
class Queue
{
public:
//構(gòu)造函數(shù)
Queue()
{
_base = new QElemType[QueueSize];
_front = _rear = 0;
_capacity = QueueSize;
}
//析構(gòu)函數(shù)
~Queue()
{
delete[] _base;
_base = nullptr;
_front = _rear = 0;
_capacity = 0;
}
private:
QElemType* _base;
int _front, _rear;
int _capacity;
};
??
??入隊(duì)和擴(kuò)容操作:
??我們現(xiàn)在實(shí)現(xiàn)隊(duì)列的入隊(duì)函數(shù),用于將一個元素添加到隊(duì)列中。
??if (_front == (_rear + 1) % _capacity):
這是一個判斷語句,它檢查隊(duì)列是否已滿。這里的_front,_rear和_capacity可能是隊(duì)列的私有成員變量。其中_front代表隊(duì)列的第一個元素的位置,_rear代表隊(duì)列的最后一個元素的位置(下一個插入元素的位置),_capacity代表隊(duì)列的最大容量。如果_front等于_rear + 1 % _capacity,這意味著隊(duì)列的下一個位置(_rear)已經(jīng)被占用了,即隊(duì)列已滿。
??擴(kuò)容:QElemType* newqueue = new QElemType[_capacity * 2];
: 如果隊(duì)列已滿,這段代碼會創(chuàng)建一個新的、容量是原隊(duì)列兩倍的隊(duì)列。for (int i = _front; i < _rear; i++)
: 這個循環(huán)復(fù)制原隊(duì)列中從_front到_rear - 1的所有元素到新的隊(duì)列中。delete[] _base;
: 釋放原隊(duì)列所占用的內(nèi)存。_base = newqueue;
: 將新隊(duì)列的指針賦值給_base,這樣原隊(duì)列的指針就指向了新的隊(duì)列。然后更新隊(duì)列的容量即可。
??入隊(duì): 就在隊(duì)列的最后一個位置插入新的元素。更新隊(duì)列的最后一個位置即可。如果增加后超過了隊(duì)列的容量,則取模(%)操作會將其限制在隊(duì)列的范圍內(nèi)(0到_capacity-1)。
??順序隊(duì)列的一些操作和判斷:
??空隊(duì)列判斷條件: rear == front
??尾指針的移動方式: rear = (rear+1)%QueueSize
??頭指針的移動方式: front=(front+1)%QueueSize
??判斷隊(duì)列滿: front == (rear+1)%QueueSize
void Push(const QElemType& val)
{
//判斷隊(duì)列是否已滿
if (_front == (_rear + 1) % _capacity)
{
QElemType* newqueue = new QElemType[_capacity * 2];
for (int i = _front; i < _rear; i++)
{
newqueue[i] = _base[i];
}
//刪除原來?xiàng)V性?/span>
delete[] _base;
_base = newqueue;
_capacity *= 2;
}
_base[_rear] = val;
//如果想讓隊(duì)列超過QueueSize的長度,一定要%_capacity;
_rear = (_rear + 1) % _capacity;
}
??
??出隊(duì)操作:
??實(shí)現(xiàn)隊(duì)列出隊(duì)操作我們先判斷隊(duì)列是否為空, 它檢查隊(duì)列的前端(_front)和后端(_rear)是否相等。如果相等,這意味著隊(duì)列為空,沒有元素可以刪除。則輸出信息直接返回,不執(zhí)行任何操作。
??如果隊(duì)列不為空,這行代碼將_base數(shù)組中索引為_front的元素賦值給引用參數(shù)e。這意味著,當(dāng)你調(diào)用Pop函數(shù)時,通過引用參數(shù)e來獲取被出隊(duì)的元素。當(dāng)元素被刪除后,前端位置需要更新以指向下一個未被刪除的元素。 這里使用模運(yùn)算符(%)來確保前端位置在超過隊(duì)列容量時回到隊(duì)列的開始位置。
void Pop(QElemType& e)
{
if (_front == _rear)
{
cout << "隊(duì)列為空,無法刪除\n";
return;
}
e = _base[_front];
_front = (_front + 1) % _capacity;
}
??隊(duì)列測試:
????????????
4.利用棧實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換
??我們可以利用棧將一個十進(jìn)制數(shù)轉(zhuǎn)換為另一個進(jìn)制數(shù):
??函數(shù)首先聲明了兩個字符串變量s和table,以及兩個整型量m和n。table是一個包含16個字符的字符串,用于表示16進(jìn)制的數(shù)。
??然后函數(shù)要求用戶輸入要轉(zhuǎn)換的十進(jìn)制數(shù)m和目標(biāo)進(jìn)制數(shù)n。函數(shù)檢查如果輸入的數(shù)m為0,則直接輸出0,因?yàn)?在任何進(jìn)制下都等于0。
??接下來如果輸入的數(shù)m為負(fù)數(shù),則將其轉(zhuǎn)換為正數(shù),并標(biāo)記flag為true,表示這個數(shù)之前是負(fù)數(shù)。然后我們創(chuàng)建了一個名為st的堆,利用堆的性質(zhì),可以存儲轉(zhuǎn)換后的字符。在while循環(huán)中,函數(shù)將輸入的數(shù)m不斷模以目標(biāo)進(jìn)制數(shù)n,取出每次的余數(shù),將余數(shù)對應(yīng)的字符從table中取出,并壓入堆棧st中。 同時,更新輸入的數(shù)m為原來的數(shù)除以目標(biāo)進(jìn)制數(shù)。
??如果之前標(biāo)記過flag為true(即輸入的數(shù)是負(fù)數(shù)),則在堆棧中壓入一個’-'字符。最后,函數(shù)將堆棧中的所有字符取出并拼接到字符串s中,然后輸出這個字符串。這個字符串就是轉(zhuǎn)換后的數(shù)。
void Decimal_Conversion()
{
string s, table = "0123456789ABCDEF";
int m, n;
cout << "請輸入:m為輸入的數(shù),n為轉(zhuǎn)換的進(jìn)制\n";
cout << "m=";
cin >> m;
cout << "n=";
cin >> n;
bool flag = false;
if (m == 0) cout << "0";
//如果是負(fù)數(shù),則轉(zhuǎn)成正數(shù),并標(biāo)記一下
if (m < 0)
{
m = 0 - m;
flag = true;
}
Stack<char> st;
//按進(jìn)制換算成對應(yīng)的字符添加到s
while (m)
{
st.Push(table[m % n]);
m /= n;
}
if (flag)
{
st.Push('-');
}
while (!st.Empty())
{
s += st.Top();
st.Pop();
}
cout << s << endl;
}
??測試:
??
10轉(zhuǎn)化為2進(jìn)制:1010
??
150轉(zhuǎn)化為8進(jìn)制:226
??
100001轉(zhuǎn)化為16進(jìn)制:186A1
????????????
5.利用隊(duì)列解決約瑟夫環(huán)問題
??我們可以利用隊(duì)列解決約瑟夫環(huán)問題。約瑟夫環(huán):描述了一組共m個人圍成一圈,從第n個人開始報(bào)數(shù),報(bào)到m的人出列,然后從下一個人重新開始報(bào)數(shù),直到所有的人都出列的問題。
??首先,函數(shù)向用戶提示輸入約瑟夫環(huán)的兩個人數(shù)m和n。然后,使用隊(duì)列que來模擬人們圍成的圓圈。初始時,將1到m的人依次入隊(duì)。使用一個計(jì)數(shù)器count,從1開始計(jì)數(shù),每次循環(huán)都會增加1,直到達(dá)到目標(biāo)n。
??如果計(jì)數(shù)器count小于目標(biāo)n,表示當(dāng)前人不需要出列,將隊(duì)頭元素取出(即這個人),從隊(duì)列中刪除(模擬這個人跳過),然后將這個元素重新插入隊(duì)尾(這個人回到圓圈的尾部)。 然后,計(jì)數(shù)器count加1,為下一次循環(huán)做準(zhǔn)備。
??如果計(jì)數(shù)器count等于目標(biāo)n,表示當(dāng)前人需要出列,將隊(duì)頭元素取出并打?。ㄟ@個人是出列的人),然后從隊(duì)列中刪除這個元素(模擬這個人完全出列),然后將計(jì)數(shù)器count重置為1,繼續(xù)下一輪循環(huán)。
??當(dāng)隊(duì)列為空時,說明所有的人已經(jīng)出列,退出循環(huán)。
void Joseph_Exchange()
{
cout << "約瑟夫環(huán)問題:請輸入一共有m人,第n人出局:\n";
int m, n;
cout << "m=";
cin >> m;
cout << "n=";
cin >> n;
//填入隊(duì)列中
Queue<int> que;
for (int i = 1; i <= m; i++)
{
que.Push(i);
}
//從第n開始計(jì)數(shù)
for (int i = 1; i <= n; i++)
{
QElemType tmp = que.Head();
que.Pop();
que.Push(tmp);
}
//計(jì)數(shù)器,計(jì)到目標(biāo)就輸入
int count = 1;
while (!que.Empty())
{
if (count < n)
{
QElemType tmp = que.Head();
que.Pop();
que.Push(tmp);
count++;
}
else if (count == n)
{
cout << que.Head() << " ";
que.Pop();
count = 1;
}
}
}
??測試:
????????????
6.全部源碼
Stack.h
#pragma once
#define SElemType int
#define InitStackSize 100
template<class T>
class Stack
{
public:
//構(gòu)造函數(shù)
Stack()
{
_base = _top = new SElemType[InitStackSize];
_size = InitStackSize;
}
//析構(gòu)函數(shù)
~Stack()
{
delete[] _base;
_top = _base = nullptr;
_size = 0;
}
//入棧
void Push(const SElemType& val)
{
//棧滿,擴(kuò)容
if (_top - _base == _size)
{
//轉(zhuǎn)移棧中的元素
SElemType* newbase = new SElemType[_size * 2];
for (int i = 0; i < _size; i++)
{
newbase[i] = _base[i];
}
//刪除原來?xiàng)V性?/span>
delete[] _base;
_base = newbase;
_top = newbase + _size;
_size *= 2;
}
//入棧操作
*_top = val;
_top++;
_size++;
}
//出棧
void Pop(SElemType& e)
{
if (_size == 0)
{
cout << "該棧為空,無法刪除\n";
return;
}
//出棧操作
e = *_top;
_top--;
_size--;
}
//重載出棧
void Pop()
{
if (_size == 0)
{
cout << "該棧為空,無法刪除\n";
return;
}
//出棧操作
_top--;
}
//輸出棧頂元素
SElemType Top()
{
if (_base == _top)
{
cout << "棧空,沒有元素\n";
return -1;
}
return *(_top - 1);
}
//判斷棧空
bool Empty()
{
if (_base == _top)
{
return true;
}
else
{
return false;
}
}
//打印棧中的元素
void Print()
{
SElemType* cur = _base;
if (_base == _top)
{
cout << "該棧為空\n";
return;
}
else
{
cout << "該棧中的元素為:";
while (cur != _top)
{
cout << *cur << " ";
cur++;
}
cout << endl;
}
}
private:
SElemType* _base, * _top;
int _size;
};
????????????文章來源:http://www.zghlxwxcb.cn/news/detail-718714.html
Queue.h
#pragma once
#define QueueSize 100
#define QElemType int
template<class T>
class Queue
{
public:
//構(gòu)造函數(shù)
Queue()
{
_base = new QElemType[QueueSize];
_front = _rear = 0;
_capacity = QueueSize;
}
//析構(gòu)函數(shù)
~Queue()
{
delete[] _base;
_base = nullptr;
_front = _rear = 0;
_capacity = 0;
}
//入隊(duì)操作
void Push(const QElemType& val)
{
//判斷隊(duì)列是否已滿
if (_front == (_rear + 1) % _capacity)
{
QElemType* newqueue = new QElemType[_capacity * 2];
for (int i = _front; i < _rear; i++)
{
newqueue[i] = _base[i];
}
//刪除原來隊(duì)列中元素
delete[] _base;
_base = newqueue;
_capacity *= 2;
}
_base[_rear] = val;
//如果想讓隊(duì)列超過QueueSize的長度,一定要%_capacity;
_rear = (_rear + 1) % _capacity;
}
//出隊(duì)操作
void Pop(QElemType& e)
{
if (_front == _rear)
{
cout << "隊(duì)列為空,無法刪除\n";
return;
}
e = _base[_front];
_front = (_front + 1) % _capacity;
}
//重載出隊(duì)操作
void Pop()
{
if (_front == _rear)
{
cout << "隊(duì)列為空,無法刪除\n";
return;
}
_front = (_front + 1) % _capacity;
}
//輸出隊(duì)頭元素
QElemType Head()
{
if (_front == _rear)
{
cout << "隊(duì)列為空,無隊(duì)頭元素\n";
return -1;
}
return _base[_front];
}
//判斷是否為空隊(duì)列
bool Empty()
{
if (_front == _rear)
{
return true;
}
else
{
return false;
}
}
//打印隊(duì)列中的元素
void Print()
{
if (_front == _rear)
{
cout << "該隊(duì)列為空\n";
return;
}
else
{
cout << "該隊(duì)列中的元素為:";
for (int i = _front; i < _rear; i++)
{
std::cout << _base[i] << " ";
}
cout << endl;
}
}
private:
QElemType* _base;
int _front, _rear;
int _capacity;
};
????????????文章來源地址http://www.zghlxwxcb.cn/news/detail-718714.html
test.cpp
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
#include"Stack.h"
#include"Queue.h"
void stack_test()
{
Stack<int> st;
st.Print();
cout << "該棧是否為空:" << st.Empty() << endl;
st.Push(1);
st.Push(2);
st.Push(3);
st.Push(4);
st.Print();
cout << "棧頂元素為:" << st.Top() << endl;
st.Pop();
st.Pop();
st.Print();
cout << "該棧是否為空:" << st.Empty() << endl;
st.Push(5);
st.Push(6);
st.Push(7);
st.Push(8);
st.Print();
cout << "棧頂元素為:" << st.Top() << endl;
st.Pop();
st.Pop();
st.Print();
}
void queue_test()
{
Queue<int> que;
que.Print();
cout << "該隊(duì)列是否為空:" << que.Empty() << endl;
que.Push(1);
que.Push(2);
que.Push(3);
que.Push(4);
que.Print();
cout << "隊(duì)頭元素為:" << que.Head() << endl;
que.Pop();
que.Pop();
que.Print();
cout << "該隊(duì)列是否為空:" << que.Empty() << endl;
que.Push(5);
que.Push(6);
que.Push(7);
que.Push(8);
que.Print();
cout << "隊(duì)頭元素為:" << que.Head() << endl;
que.Pop();
que.Pop();
que.Print();
}
void Decimal_Conversion()
{
string s, table = "0123456789ABCDEF";
int m, n;
cout << "請輸入:m為輸入的數(shù),n為轉(zhuǎn)換的進(jìn)制\n";
cout << "m=";
cin >> m;
cout << "n=";
cin >> n;
bool flag = false;
if (m == 0) cout << "0";
//如果是負(fù)數(shù),則轉(zhuǎn)成正數(shù),并標(biāo)記一下
if (m < 0)
{
m = 0 - m;
flag = true;
}
Stack<char> st;
//按進(jìn)制換算成對應(yīng)的字符添加到s
while (m)
{
st.Push(table[m % n]);
m /= n;
}
if (flag)
{
st.Push('-');
}
while (!st.Empty())
{
s += st.Top();
st.Pop();
}
cout << s << endl;
}
void Joseph_Exchange()
{
cout << "約瑟夫環(huán)問題:請輸入一共有m人,第n人出局:\n";
int m, n;
cout << "m=";
cin >> m;
cout << "n=";
cin >> n;
//填入隊(duì)列中
Queue<int> que;
for (int i = 1; i <= m; i++)
{
que.Push(i);
}
//從第n開始計(jì)數(shù)
for (int i = 1; i <= n; i++)
{
QElemType tmp = que.Head();
que.Pop();
que.Push(tmp);
}
//計(jì)數(shù)器,計(jì)到目標(biāo)就輸入
int count = 1;
while (!que.Empty())
{
if (count < n)
{
QElemType tmp = que.Head();
que.Pop();
que.Push(tmp);
count++;
}
else if (count == n)
{
cout << que.Head() << " ";
que.Pop();
count = 1;
}
}
}
int main()
{
//stack_test();
//queue_test();
//Decimal_Conversion();
Joseph_Exchange();
return 0;
}
到了這里,關(guān)于數(shù)據(jù)結(jié)構(gòu)上機(jī)實(shí)驗(yàn)——棧和隊(duì)列的實(shí)現(xiàn)、棧和隊(duì)列的應(yīng)用、進(jìn)制轉(zhuǎn)換、約瑟夫環(huán)問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!