棧和佇列(用C++實現棧和佇列)
阿新 • • 發佈:2019-02-06
棧是一種後進先出的線型結構,C++實現棧的程式碼如下:
#include <iostream> using namespace std; #define MAXLEN 50 typedef struct { char key[10]; char name[20]; int age; }Data; typedef struct { Data nodeData[MAXLEN+1]; int top; }StackType; void STInit(StackType &ST)//ST前一定要加上&,因為傳入的是定義的ST本身,而不是隻傳入ST的值 { ST.top = -1; } void STPush(StackType &ST,Data nodeData) { ST.nodeData[ST.top+1]=nodeData; ST.top++; } int STIsFull(StackType &ST) { if(ST.top==MAXLEN) return 1; else return 0; } int STIsEmpty(StackType &ST) { if(ST.top == -1) return 1; else return 0; } void ClearStack(StackType &ST) { ST.top =-1; cout<<"clear the stack!!"<<endl; } void STShow(StackType &ST) { cout<<"*******Show the Stack*******"<<endl; for(int i=0;i<=ST.top;i++) { cout<<"index:"<<i<<" "<<"key:"<<ST.nodeData[i].key<<" "<<"name:"<<ST.nodeData[i].name<<" "<<"age:"<<ST.nodeData[i].age<<endl; } cout<<"****************************"<<endl; } void STPop(StackType &ST) { ST.top--; } int main() { StackType ST; STInit(ST); if(STIsEmpty(ST)) cout<<"Empty!!"<<endl; STShow(ST); Data nodeData; strcpy(nodeData.key,"No.1"); strcpy(nodeData.name,"hahaha"); nodeData.age = 21; STPush(ST,nodeData); strcpy(nodeData.key,"No.2"); STPush(ST,nodeData); strcpy(nodeData.key,"No.3"); STPush(ST,nodeData); STShow(ST); STPop(ST); STShow(ST); ClearStack(ST); STShow(ST); }
/* QUEUE front指向首元素 tail指向尾元素的下一位置 */ #include<iostream> using namespace std; #define MAXLEN 5 typedef struct { char key[10]; char name[20]; int age; }Data; typedef struct { Data nodeData[MAXLEN]; int front; int tail; }QType; void QInit(QType &QT) { QT.front=0; QT.tail=0; cout<<"QUEUE have been init!!"<<endl; } void QShow(QType &QT) { cout<<"*****Show the QUEUE!!!*****"<<endl; for(int i=QT.front;i<QT.tail;i++) { cout<<"index:"<<i<<" "<<"key:"<<QT.nodeData[i].key<<" "<<"name:"<<QT.nodeData[i].name<<" "<<"age:"<<QT.nodeData[i].age<<endl; } cout<<"***************************"<<endl; } int QIsEmpty(QType &QT) { if(QT.front == QT.tail) return 1; else return 0; } int QIsFull(QType &QT) { if(QT.tail == MAXLEN) return 1; else return 0; } void ClearQueue(QType &QT) { QT.front = 0; QT.tail = 0; cout<<"QUEUE is already clear!!"<<endl; } void QPush(QType &QT,Data nodeData) { QT.nodeData[QT.tail] = nodeData; QT.tail++; } void QPop(QType &QT) { QT.front++; } int QLength(QType &QT) { return QT.tail - QT.front; } int main() { Data DL[5]={{"No.1","hahaha",21}, {"No.2","lalala",32}, {"No.3","mememe",123}, {"No.4","sasasa",1231244}, {"No.5","momomo",5432}}; QType QT; QInit(QT); QShow(QT); QPush(QT,DL[0]); QShow(QT); QPush(QT,DL[1]); QPush(QT,DL[2]); QPush(QT,DL[3]); QPush(QT,DL[4]); if(QIsFull(QT)) { cout<<"FULL!!"<<endl; } QShow(QT); QPop(QT); QShow(QT); cout<<"QUEUE length:"<<QLength(QT)<<endl; ClearQueue(QT); QShow(QT); return 0; }