# include <stdio.h>
# include <stdlib.h>
# include <malloc.h>
//节点结构
typedef struct Node
{
int data; //节点数据域
struct Node * pNext; //节点指针域,指向下一个NODE节点地址
}NODE, * PNODE;
//栈结构
typedef struct Stack
{
PNODE pTop; //栈的头节点
PNODE pBottom; //栈的底节点
}STACK, * PSTACK;
//创建一个栈
void init(PSTACK pS);
//压栈
void push(PSTACK pS,int val);
//判断栈是否为空
bool isEmpty(PSTACK pS);
//出栈
bool pop(PSTACK pS,int * val);
//遍历输出
void traverse(PSTACK pS);
int main(void)
{
STACK S;
int val;
init(&S);
push(&S,1);
push(&S,2);
push(&S,3);
push(&S,4);
traverse(&S);
if(pop(&S,&val)){
printf("出栈的元素为%d \n", val);
}else{
printf("为空出栈失败 \n");
}
traverse(&S);
return 0;
}
void init(PSTACK pS) //栈的初始状态,栈的头部等于底部
{
pS->pTop = (PNODE)malloc(sizeof(NODE));
if(pS->pTop == NULL){
printf("动态开辟内存失败");
exit(-1);
}else{
pS->pBottom = pS->pTop;
pS->pTop->pNext = NULL; //指针域为空,表示没有指向下一个节点
}
}
void push(PSTACK pS,int val)
{
//首先创建一个新节点
PNODE pNew = (PNODE)malloc(sizeof(NODE));
if(pNew == NULL){
printf("动态开辟内存失败");
exit(-1);
}else{
pNew->data = val; //数据域填入数据
pNew->pNext = pS->pTop; //指针域指向pTop;
pS->pTop = pNew; //新压栈进来的节点放在pTop上
}
}
void traverse(PSTACK pS)
{
PNODE p = pS->pTop;
while(p != pS->pBottom) //栈头不等于栈底
{
printf("%d ",p->data);
p = p->pNext;
}
printf("\n");
}
bool isEmpty(PSTACK pS)
{
if(pS->pTop == pS->pBottom){
return true;
}else{
return false;
}
}
//出栈一次
bool pop(PSTACK pS,int * val)
{
if(isEmpty(pS)){
return false;
}else{
PNODE r = pS->pTop; //要删除的那个先存起来
* val = r->data; //要删除值
pS->pTop = r->pNext; //下一个变成top
free(r);
r = NULL;
return true;
}
}
栈结构(C语言)
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 鼠标轻划,网络泛舟,寻寻觅觅,于千年中华文化藕花盛开处。百度百度,易安感伤,宛如流水,轻淌于丝丝琴弦,婉语细言乘袅...