题目:自己动手实现一个链式栈,并实现判空、push、pop、getTop等操作。
解题思路:设计类题目,使用链表。
全部代码如下:
#include<iostream>
#include<stack>
using namespace std;
typedef struct node{
int val;
struct node* next;
}ListNode,*LinkStack;
void initstack(LinkStack& s){ //初始化,栈顶指针置空
s = NULL;
}
bool isEmpty(LinkStack& s){ //判空
return s == NULL;
}
void push(LinkStack& s, int x){ //插入不需判满
ListNode* p = new ListNode;
p->val = x;
p->next = s;
s = p;
}
bool pop(LinkStack& s, int& x){ //出栈需要判空
if(isEmpty(s)) return false;
ListNode* p = s;
x = p->val;
s = s->next;
delete p; //释放原栈顶结点
return true;
}
bool getTop(LinkStack& s, int& x){ //获取栈顶元素
if(isEmpty(s)) return false;
x= s->val;
return true;
}
int main(){
LinkStack s;
initstack(s);
cout<<"s是否为空:"<<isEmpty(s)<<endl;
push(s, 1);
int x;
getTop(s, x);
cout<<"栈顶:"<<x<<endl;
pop(s, x);
cout<<"s是否为空:"<<isEmpty(s)<<endl;
}
结果如下:
更多代码请参考:手撕考研数据结构(代码汇总)