c++ 栈和队列的基本实现
栈是一种后进先出的线型结构,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);
- }