# include <stdio.h>
# include <malloc.h>
# include <stdlib.h>
typedef struct Node //定义结点类型变量
{
int data;
struct Node* pNext;
} NODE, *PNODE;
typedef struct Stack //定义栈类型变量
{
PNODE pTop;
PNODE pBottom;
}STACK, *PSTACK;
//功能函数
void init_Stack(PSTACK); //初始化
bool empty(PSTACK); //判断是否为空栈
int length_Stack(PSTACK); //栈的长度
void push_Stack(PSTACK,int); //压栈(入栈)
bool pull_Stack(PSTACK, int*) ;//出栈
void clear_Stack(PSTACK); //清空
void traverse_Stack(PSTACK); //遍历
//主函数
int main(void)
{
STACK S ;
int val;
init_Stack(&S);
push_Stack(&S,1);
push_Stack(&S,2);
push_Stack(&S,3);
push_Stack(&S,4);
push_Stack(&S,5);
traverse_Stack(&S);
clear_Stack(&S);
traverse_Stack(&S);
/*if(pull_Stack(&S,&val))
{
printf("出栈成功! 出栈的元素是:%d \n", val);
}
else
printf("出栈失败! \n"); */
//int len = length_Stack(&S);
//printf("len = %d \n",len);
return 0;
}
void init_Stack(PSTACK pS) //初始化
{
pS->pTop = (PNODE)malloc(sizeof(NODE)); //栈顶指向一个头结点
if(pS->pTop == NULL)
{
printf("内存分配失败!\n");
exit(-1);
}
else
{
pS->pBottom = pS->pTop; //栈底也指向头结点
pS->pTop->pNext = NULL; //结点指针域置空
}
}
int length_Stack(PSTACK pS) //栈的长度
{
PNODE p = pS->pTop;
int len = 0;
while(p != pS->pBottom)
{
pS->pTop = p->pNext;
len++;
p = p->pNext;
}
return len;
}
bool empty(PSTACK pS) //判断是否为空栈
{
if(pS->pTop == pS->pBottom)
{
return true;
}
else
return false;
}
void push_Stack(PSTACK pS,int val) //压栈(入栈)
{
PNODE pNew = (PNODE)malloc(sizeof(NODE)); //生成一个新结点
pNew->data = val; //存入变量的值
pNew->pNext = pS->pTop; //新结点指向栈顶结点
pS->pTop = pNew;
}
bool pull_Stack(PSTACK pS, int* pVal) //出栈
{
if( empty(pS) )
{
return false;
}
else
{
PNODE r = pS->pTop;
*pVal = r->data;
pS->pTop = r->pNext;
free(r);
r = NULL;
return true;
}
}
void traverse_Stack(PSTACK pS) //遍历
{
PNODE p = pS->pTop; //p指向栈顶
while(p != pS->pBottom)
{
printf("%d ", p->data);
p = p->pNext;
}
printf("\n");
return;
}
void clear_Stack(PSTACK pS) //清空
{
if( empty(pS) )
{
printf("栈为空\n");
return ;
}
else
{
PNODE p = pS->pTop;
PNODE q = NULL;
while( p != pS->pBottom )
{
q = p->pNext;
free(p);
p = q;
}
pS->pTop = pS->pBottom;
printf("已清空!\n");
}
return ;
}
数据结构-受限制的线性表-栈【链栈】-版本1
最新推荐文章于 2025-10-17 21:45:59 发布
