#include <stdio.h>
#include <stdlib.h>
typedef int elemType;
typedef struct List
{
elemType elem;
struct List* next;
}Node;
typedef struct listStack
{
Node* top;
int stackSize;
}Stack;
//创建空栈
Stack* createStack()
{
Stack* S;
if((S=(Stack*)malloc(sizeof(Stack)))!=NULL)
{
S->top=NULL;
S->stackSize=0;
}
return S;
}
//判断栈是否为空栈
bool isEmptyStack(Stack* S)
{
return S->top==NULL&&S->stackSize==0;
}
//入栈
void push(Stack* S,elemType elem)
{
Node* p;
if((p=(Node*)malloc(sizeof(Node)))!=NULL)
{
p->elem=elem;
p->next=NULL;
if(isEmptyStack(S))
S->top=p;
else
{
p->next=S->top;
S->top=p;
}
S->stackSize++;
}
}
//出栈 elem返回值
void pull(Stack* S,elemType* elem)
{
if(isEmptyStack(S))
printf("空栈,无法出栈\r\n");
else
{
*elem=S->top->elem;
Node* p;
p=S->top;
S->top=p->next;
free(p);
p=NULL;
S->stackSize--;
}
}
//返回栈大小
int getSizeStack(Stack* S)
{
return S->stackSize;
}
//清空栈
void clearStack(Stack* S)
{
if(isEmptyStack(S))
printf("空栈,不用清空\r\n");
else
{
int elem;
while(!isEmptyStack(S))
pull(S,&elem);
printf("清空栈完毕\r\n");
}
}
//销毁栈
void destroyStack(Stack* S)
{
if(isEmptyStack(S))
printf("空栈,不用销毁\r\n");
else
{
clearStack(S);
printf("销毁栈完毕\r\n");
//free(S);
//S=NULL;
}
}
//返回栈顶 elem返回值
Node* getTopStack(Stack* S,elemType* elem)
{
*elem=S->top->elem;
return S->top;
}
//遍历栈
void displayStack(Stack* S)
{
printf("遍历栈\t");
if(isEmptyStack(S))
printf("空栈\r\n");
else
{
int i=S->stackSize;
Node* p=S->top;
while(i--)
{
printf("%d\t",p->elem);
p=p->next;
}
printf("\r\n");
}
}
int main()
{
Stack* S;
int elem;
S=createStack();
int i;
for(i=0;i<5;i++)
push(S,i);
displayStack(S);
for(i=0;i<5;i++)
{
pull(S,&elem);
printf("%d\t",elem);
}
printf("\r\n");
displayStack(S);
/*clearStack(S);
displayStack(S);
destroyStack(S);
displayStack(S);
*/
return 0;
}
栈(C语言)
最新推荐文章于 2024-07-25 17:43:13 发布