链栈的建立、判空、入栈、出栈、求长、访顶、清空和销毁

来源:互联网 发布:vb 显示在picturebox 编辑:程序博客网 时间:2024/04/30 10:53
#include<iostream>using namespace std;typedef struct node{int data;struct node*next;}Node, *stack;//初始化栈void initialsatck(stack &s){s = new Node;s->next = NULL;}//判断栈是不是空的bool isempty(stack &s){if (NULL == s){cout << "栈不存在" << endl;//表示栈没初始化成功exit(0);}if (s->next == NULL){return true;}return false;}//进行入栈操作push函数void push(stack &s, int element){//先开辟一个空间存储新的数据Node*p = new Node;p->data = element;p->next = s->next;s->next = p;}//出栈操作int pop(stack &s){if (isempty(s)){exit(1);}Node* p = s->next;//按照出战的过程,先进后出,找到栈首的下一个结点,使栈首指向取出结点的下一个结点对象s->next = p->next;int element = p->data;delete p;        //清空取出数据的空间return element;}int getlength(stack& s) //取栈的地址,进行查看栈的长度{Node* p = s;int length = 0;while (p->next != NULL){p = p->next;length++;}return length;}//获取栈顶的数据  int gettop(stack& s){if (isempty(s)){exit(1);}return s->next->data;}//清空栈的空间  这只是销毁栈的存储数据的空间,没有销毁栈首的位置void clearstack(stack& s){while (!isempty(s)){pop(s);}}//销毁栈空间void destorystack(stack& s){while(!isempty(s)){pop(s);}delete s;s = NULL;}void print(bool b){if (b)cout << "yes" << endl;else    cout << "no" << endl;}int main(){stack s;initialsatck(s);for (int i = 0; i < 10; i++){push(s, i);}cout << getlength(s) << endl;while (!isempty(s)){cout << pop(s) << endl;}cout << getlength(s) << endl;clearstack(s);cout << getlength(s) << endl;destorystack(s);system("pause");return 0;}

0 0
原创粉丝点击