//@author:Archer
//@email:[email protected] || [email protected]
//模仿+练习+改进
#include <stdio.h>
#include <stdlib.h>
typedef struct Node
{
int data;
struct Node * pNext;
}NODE,*PNODE;
typedef struct stack
{
int length;
PNODE pTop;//栈顶
PNODE pBottom;//栈底
}STACK,*PSTACK;
void init_stack(PSTACK);//生成一个空栈
void push_stack(PSTACK);//压栈操作
void traverse_stack(PSTACK);//遍历栈,输出栈中的元素
void check_malloc(PNODE);//检查动态内存分配状况
bool pop_stack(PSTACK);//出栈操作
bool is_empty(PSTACK pstack);//判断栈是否为空
int main(void)
{
STACK stack;
init_stack(&stack);
push_stack(&stack);
traverse_stack(&stack);
pop_stack(&stack);
traverse_stack(&stack);
printf("\n\n");
system("pause");
return 0;
}
void init_stack(PSTACK pstack)
{
pstack->pTop = (PNODE)malloc(sizeof(NODE));
PNODE p = pstack->pTop;
check_malloc(p);
pstack->pBottom = pstack->pTop;
pstack->pTop->pNext = NULL;
}
void push_stack(PSTACK pstack)
{
int i =0;
int value;
int length = 0;
printf("请输入要压栈的元素个数:");
scanf("%d",&length);
pstack->length = length;
for(i=0;i<length;i++)
{
PNODE pNew = (PNODE)malloc(sizeof(NODE));
check_malloc(pNew);
printf("\n请输入第%d个元素:",i+1);
scanf("%d",&value);
pNew->data = value;
pNew->pNext = pstack->pTop;
pstack->pTop = pNew;
}
return;
}
void traverse_stack(PSTACK pstack)
{
if(is_empty(pstack))
{
printf("该栈为空");
return;
}
int i = pstack->length;
PNODE p = NULL;
p = pstack->pTop;
while(p!=pstack->pBottom)
{
printf("\n第%d个元素为:%d\n",i,p->data);
p=p->pNext;
i--;
}
return;
}
bool pop_stack(PSTACK pstack)
{
int count = 0;
int i;
PNODE r = NULL;
if(is_empty(pstack))
{
printf("\n该栈为空\n");
return false;
}
else
{
printf("\n请输入要出栈的元素个数:");
scanf("%d",&count);
for(i=count;i>0;i--)
{
r = pstack->pTop;
pstack->pTop= pstack->pTop->pNext;
free(r);
}
return true;
}
}
void check_malloc(PNODE p)
{
if(p == NULL)
{
printf("\n动态内存分配失败!\n");
exit(-1);
}
}
bool is_empty(PSTACK pstack)
{
if(pstack->pTop == pstack->pBottom)
{
return true;
}
else
{
return false;
}
}
链式栈的初体验
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.