棧:
#include
using namespace std;
template
struct node
};template
class stack
bool push(const t & e);
const t& pop();
const t& gtop();
bool empty();
int size();
bool clear();
private:
node* top;
node* bottom;
};template
bool stack::push(const t & e)
template
const t & stack::pop()
if(empty())
cout<<"棧為空,pop失敗!"node* p=bottom;
node* q=null;
while(p->next)
q->next=null;
top=q;
t e=p->date;
delete p;
return e;
}template
const t& stack::gtop()
if(empty())
cout<<"棧為空,gtop失敗!"return top->date;
template
bool stack::empty()
if(top==bottom)
return true;
else
return false;
template
int stack::size()
}template
bool stack::clear()
return true;
}int main()
};template
class queue
bool add(const t & e);
const t & del();
bool empty();
int size();
bool clear();
private:
node* front;
node* rear;
};template
bool queue::add(const t & e)
template
const t & queue::del()
node* p=front->next;
t e=p->date;
front->next=p->next;
delete p;
return e;
}template
bool queue::empty()
else
}template
int queue::size()
return i;
}template
bool queue::clear()
return true;
}int main()
else
q.clear();
return 0;
}迴圈佇列:
迴圈佇列中,由於入隊時尾指標向前追趕頭指標;出隊時頭指標向前追趕尾指標,造成隊空和隊滿時頭尾指標均相等。因此,無法通過條件front==rear來判別佇列是"空"還是"滿"。
解決這個問題的方法至少有兩種:
① 另設一布林變數
以區別佇列的空和滿;
②另一種方式就是資料結構
常用的: 隊滿時:(rear+1)%n==front,n為佇列長度(所用陣列
大小),由於rear,front均為所用空間的指標,迴圈只是邏輯上的迴圈,所以需要求餘運算。如圖情況,隊已滿,但是rear(5)+1=6!=front(0),對空間長度求餘,作用就在此6%6=0=front(0)。
#include
using namespace std;
#define queuesize 10
template
class cirqueue
public:
cirqueue():front(0),rear(0),count(0)
boolempty();
boolfull();
booladd(const t& e);
booldel(t &e);
int size();
private:
int front;
int rear;
intcount;
t date[queuesize];
template
bool cirqueue::empty()
if(rear%queuesize==front)
returntrue;
else
returnfalse;
template
bool cirqueue::full()
if((rear+1)%queuesize==front)
returntrue;
else
returnfalse;
template
bool cirqueue::add(const t& e)
if(full())
cout<<"佇列已滿,add失敗!"date[rear]=e;
rear++;
count++;
returntrue;
template
bool cirqueue::del(t & e)
if(empty())
cout<<"隊列為空!,del失敗!"e=date[front];
front++;
count--;
returntrue;
template
int cirqueue::size()
returncount;
int main()
cirqueueq;
if(q.empty())
cout<<"隊列為空!"q.add(9);
q.add(8);
cout<<"佇列長度:"cout<<"佇列已滿!"cout<<"佇列未滿!"q.add(i);
if(q.full())
cout<<"佇列已滿!"cout<<"佇列未滿!"q.del(e);
cout<<"出隊:" 佇列是一種特殊的 線性表,特殊之處在於它只允許在表的前端 front 進行刪除操作,而在表的後端 rear 進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。佇列的資料元素又稱為佇列元素。在佇列中插入乙個佇列元素稱為入隊,從佇列中刪除乙個佇列元... 佇列是一種先進先出的資料結構,要想實現先進後出,需加乙個輔助佇列進行資料的來回倒 引用交換 從而實現棧結構。例如 5 4 3 2 1 用乙個輔助佇列裝 4 3 2 1,把5彈出,在把 4 3 2 1放回原佇列,如此反覆可變成5 4 3 2 1的棧結構。棧是一種先進後出的資料結構,要想實現先進先出,同... 兩個佇列實現棧 每次進入乙個佇列,取出得時候,把所有元素進入另乙個佇列,只留下乙個元素,以此實現棧的先進後出 filo package algorithmbymyself import j a.util.linkedlist import j a.util.queue 用兩個佇列實現乙個棧 publ...C語言實現,順序佇列,迴圈佇列,和棧!
佇列實現棧棧實現佇列
佇列實現棧,棧實現佇列