顺序栈:
#include "seq_stack.h" seq_p creat_stack() //从堆区申请顺序栈的空间 {seq_p S=(seq_p)malloc(sizeof(seq_stack));if(S==NULL){printf("空间申请失败\n");return NULL;}bzero(S->data,sizeof(S->data));S->top=-1;return S; } int empty_stack(seq_p S) //判空 {if(S==NULL){printf("入参为空,请检查\n");return -1;}return S->top==-1?1:0; } int full_stack(seq_p S) //判满 {if(S==NULL){printf("入参为空,请检查\n");return -1;}return S->top==MAX-1?1:0; } void push_stack(seq_p S,int data) //入栈、压栈 {if(S==NULL){printf("入参为空,请检查\n");return;}if(full_stack(S)){printf("栈已满,不能入栈\n");return;}S->data[++(S->top)]=data; } void pop_stack(seq_p S) //出栈、弹栈 {if(S==NULL){printf("入参为空,请检查\n");return;}if(empty_stack(S)){printf("栈为空,无需出栈\n");return;}printf("出栈元素为%d\n",S->data[S->top--]); } void show_stack(seq_p S) //输出 {if(S==NULL){printf("入参为空,请检查\n");return;}if(empty_stack(S)){printf("栈为空,无需输出\n");return;}for(int i=S->top;i>=0;i--)printf("%-4d",S->data[i]);putchar(10); } void free_stack(seq_p *S) //释放顺序栈 {if(S==NULL || *S==NULL){printf("入参为空,请检查\n");return;}free(*S);*S=NULL; }
链栈:
#include "link_stack.h" node_p creat_node(int data) //申请结点 {node_p new=(node_p)malloc(sizeof(node));if(new==NULL){printf("空间申请失败\n");return NULL;}new->data=data;return new; } void push_stack(node_p *T,int data) //入栈 {node_p new=creat_node(data);new->next=*T;*T=new; } void pop_stack(node_p *T) //出栈 {if(empty_stack(*T)){printf("栈空,无需出栈\n");return;}node_p del=*T;*T=del->next;printf("出栈的元素为%d\n",del->data);free(del); } void show_stack(node_p T) //输出栈 {if(empty_stack(T)){printf("栈空,无需输出\n");return;}node_p p=T;while(p!=NULL){printf("%d->",p->data);p=p->next;}printf("NULL\n"); } int empty_stack(node_p T) //判空 {return T==NULL?1:0; }