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

来源:互联网 发布:java 异步写日志 编辑:程序博客网 时间:2024/04/30 15:01
#include<iostream>using namespace std;typedef struct node{int data;struct node *next;}Node, *Stack;void initiateStack(Stack &s){s = new Node;s->next = NULL;}bool isEmptyStack(Stack &s){if(NULL == s){cout << "栈不存在." << endl;exit(0);}if(NULL == s->next)return true;return false;}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(isEmptyStack(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(NULL != p->next){p = p->next;length++;}return length;}int getTop(Stack &s){if(isEmptyStack(s))exit(1);return s->next->data;}void clearStack(Stack &s){while(!isEmptyStack(s))pop(s);}void destoryStack(Stack &s){while(!isEmptyStack(s))pop(s);delete s;s = NULL;}void print(bool b){if(b)cout << "yes" << endl;elsecout << "no" << endl;}int main(){Stack s;initiateStack(s);int n = 100;int r = 8; // r进制while(n) // 范式{push(s, n % r);n /= r;}while(!isEmptyStack(s))cout << pop(s);cout << endl << getLength(s) << endl;int i;for(i = 1; i <= 10; i++)push(s, i);cout << getTop(s) << endl;print(isEmptyStack(s));clearStack(s);print(isEmptyStack(s));destoryStack(s);print(isEmptyStack(s));return 0;}


 

原创粉丝点击