#include <iostream> using namespace std; #include <stdlib.h> #define ERROR 0 #define OK 1 typedef struct Nlink { //栈的链式结构 int data; //数据域 Nlink *top; //出栈 Nlink *base; //进栈 }Nlink,*linklist; bool init_link(linklist &L) { //栈的初始化 L = (linklist)malloc(sizeof(Nlink)); if(!L) return ERROR; L ->base = NULL; //栈顶和栈底指向NULL值 L ->top = L ->base; return OK; } bool push_link(linklist &L) { //入栈函数 linklist T; bool gohead = 1; int data; cout << "Please input some datum(enter '0' means end of input!) :" <<endl; while(gohead) { cin >> data; if(data < 0) { cout << "ERROR DATUM!" <<endl; return ERROR; } if(0 != data) { T = (linklist)malloc(sizeof(Nlink)); //运用逆向建表方式,进行压栈 if(!T) return ERROR; T ->data = data; T ->top = L; L = T; } else gohead = 0; } return OK; } void pop_link(linklist L) { //出栈函数 while (L ->top != L->base) { cout << L ->data; L = L ->top; if(L ->top != NULL) cout << ", "; } } bool main() { linklist P; init_link(P); push_link(P); pop_link(P); free(P); while(OK); return OK; }
结果图:
总结:书上用了线性存储方法,而我练习用链式存储。
第一,回忆栈的结构,就是一个指针总是最顶端,另一个是最低端;
但是链式的栈又是怎样?栈的特点就是先进后出,好像链式结构入栈在就是相当
存储下一个数据位置(栈顶指针等于next)?,出栈相当是打印数据,这好像没有
体现栈的特点。我写错了吗?
第二,我的思想是之前编写逆向建立链式存储而写栈的程序,因为最先写入的数据
相当插入链的尾部。
总体上,总觉有问题。