1因为最近忙于软考突击,复习数据结构得往后拖了,
2感谢老师对我的一些问题的帮助
3.new( ) 分配这种类型的一个大小的内存空间,并以括号中的值来初始化这个变量;
new[ ] 分配这种类型的n个大小的内存空间,并用默认构造函数来初始化这些变量;
所以使用时还是得传一个实体;
代码:
#include<iostream>
using namespace std;
int maxsize;
typedef struct Node{
char data;
Node *next;
}Node;
typedef struct Stack{
Node *top;
Node *bottom;
}Stack;
void Init(Stack *p){
p->top=new Node();
if(p->top==NULL){
cout<<"内存分配失败"<<endl;
exit(1);
}
p->bottom=p->top;
p->top->next=NULL;
}
void push(Stack *a,char e){
Node *s=new Node();
if(s==NULL){
cout<<"内存分配失败"<<endl;
exit(1);
}
s->data=e;
s->next=a->top;
a->top=s;
}
void create(Stack *p,int a){
char b;
for(int i=0;i<a;i++){
cout<<"输入元素"<<endl;
cin>>b;
push(p,b);
}
}
bool isEmpty(Stack *a){
if(a->top==a->bottom){
return true;
}
return false;
}
char pop(Stack *a,char e){
if(isEmpty(a)){
cout<<"栈空"<<endl;
exit(1);
}
e=a->top->data;
a->top=a->top->next;
return e;
}
char gettop(Stack *a){
if(isEmpty(a)){
cout<<"栈空"<<endl;
exit(1);
}
return a->top->data;
}
int getStacksize(Stack *a){
int len=0;
Node *a1=a->top;
while(a1!=a->bottom){
len++;
a1=a1->next;
}
return len;
}
void Traver(Stack *a){
Node *p=a->top;
while(p!=a->bottom){
cout<<p->data<<endl;
p=p->next;
}
}
int main(){
Stack *p;
Stack sta;
p=&sta;
Init(p);
int a;
char c;
cout<<"输入的节点数量"<<endl;
cin>>a;
create(p,a);
cout<<"需要额外加的节点"<<endl;
cin>>c;
push(p,c);
Traver(p);
cout<<"栈顶为"<<gettop(p)<<endl;
cout<<"栈顶为"<<pop(p,c)<<endl;
cout<<"栈长度为"<<getStacksize(p)<<endl;
return 0;
}
运行截图: