#includeusing namespace std; /*顺序栈*/ #define MAXSIZE 100 /*如果是顺序栈,栈顶和栈底指针也可以用int型,通过下标定位*/ typedef struct { SElemType *base;//栈底指针 SElemType *top;//栈顶指针 int StackSize; //栈的容量 }SqStack; int InitStack(SqStack &S) { S.base=new SElemType[MAXSIZE];//从栈底开始找,让其从栈顶出去 if(!S.base) return 0; S.top=S.base;//初始化为空栈 S.StackSize=MAXSIZE;//初始化栈容量 return 0; } /*入栈*/ int Push(SqStack &S,int e) { if(S.top-S.base==S.StackSize)//不确定这块指针相减的结果是否正确 return 0;//栈满退出 *S.top++=e;//从栈顶压入元素,移动栈顶指针 return 0; } /*出栈*/ int Pop(SqStack &S,int &e) { if(S.top==S.base) return 0;//栈空 e=*--S.top;//进出栈都为栈顶 return 0; } /*取栈顶元素*///栈不删除元素 int GetTop(SqStack &S) { if(S.top==S.base)//栈非空 return *(S.top-1); } /*链栈*/ typedef struct StackNode { int elem; struct StackNode *next; }StackNode,*LinkStack;//类似于链表的创建//其实就是链表完成另一种使用规则 /*初始化栈链*/ int InitStack(LinkStack &S)//但是链栈的初始化只是构造一个空栈,不用设置头结点 { S=NULL; return 0; } /*入栈*/ int Push(LinkStack &S,int e) { StackNode *p;//结点指针 p=new StackNode;//申请空间 p->elem=e;//赋值 p->next=S;//前插,但是是以倒着看的S为栈底 S=p;//将p的位置看做栈顶 return 0; } /*出栈*/ int Pop(LinkStack &S,int &e) { e=S->elem; StackNode *p; p=S;//p临时保存栈顶元素,以备释放 S=S->next;//因为为前插,所以之前结点在指针位置的后面 delete p; return 0; } /*取栈顶元素*/ int GetTop(LinkStack S)//INT 为要返回的元素的值的类型 { if(S!=NULL) return S->elem; }
0.0分
0 人评分