栈的建立及相关算法
# include
# include
typedef struct node{
int data;/*数据域*/
struct node * next; /*指针域*/
}node,*pnode;/*栈节点*/
typedef struct Stack{
pnode top;
pnode bottom;
} stack,*pstack;/*栈本身*/
void stack_push(pstack s,int val);//入栈
void stack_pop(pstack s);/*出栈*/
bool stack_isempty(pstack s);/*栈是否为空*/
void showstack(pstack s);/*遍历栈*/
int main(){
/*初始化创建栈*/
stack s;
pstack p = &s;
pnode pnew = (pnode)malloc(sizeof(node));
p->bottom = p->top = pnew;/*最初栈顶和栈底都指向空*/
/*测试stack_push()*/
stack_push(p,5);
stack_push(p,7);
stack_push(p,19);
showstack(p);
/*测试stack_pop()*/
stack_pop(p);
showstack(p);
stack_pop(p);
showstack(p);
/*测试stack_isempty()*/
if(stack_isempty(p)) printf("栈空\n");
else printf("栈非空\n");
stack_pop(p);
if(stack_isempty(p)) printf("栈空\n");
else printf("栈非空\n");
return 0;
}
void stack_push(pstack s,int val){
pnode pnew = (pnode)malloc(sizeof(node));/*创建新节点*/
pnew->data = val;
pnew->next = s->top;
s->top = pnew;
/*尾插法插入,栈顶上移*/
}
void showstack(pstack s){
/*自上而下遍历整个栈*/
for(pnode p = s->top;p != s->bottom;p = p->next)
{
printf("%d ",p->data);
}
printf("\n");
}
void stack_pop(pstack s){
pnode p = s->top;/*用于删除的指针p*/
s->top = p->next;/*栈顶下移*/
free(p);
p = NULL;/*删除栈顶元素*/
}
bool stack_isempty(pstack s){
if(s->bottom == s->top) return true;/*当栈顶和栈底指向相同说明整个栈没有元素了*/
else return false;
}