您的位置:首页 > 其它

栈的链式存储结构以及实现

2016-11-05 09:55 323 查看


上图是栈的链式存储结构(简称链栈)的模型图,栈已经有了栈顶在头部了,单链表中比较常用的头结点也就失去了意义。

链栈的结构代码实现如下:

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>

typedef struct Node
{
int data;//数据域
struct Node * pNext;//指针域
}NODE,*PNODE;

typedef struct Stack
{
PNODE top;//指向栈顶的指针
int count;//元素的个数
}Stack,*PStack;

void createStack(PStack);//创建一个空的栈
bool push(PStack,int);//压栈
bool pop(PStack,int *);//弹栈
void showStack(PStack);//打印栈的信息

int main(void)
{
int m;
Stack stack;
createStack(&stack);
push(&stack,1);
push(&stack,2);
push(&stack,3);
showStack(&stack);
pop(&stack,&m);
showStack(&stack);
printf("弹出的栈顶元素是 %d\n",m);
return 0;
}

void createStack(PStack ps)
{
ps->top = NULL;
ps->count = 0;
}

bool push(PStack ps,int e)
{
PNODE pNew = (PNODE)malloc(sizeof(NODE));//生成一个新的节点
if(!pNew)
{
printf("动态内存分配失败!\n");
exit(-1);
}
pNew->data = e;
pNew->pNext = ps->top;
ps->top = pNew;//栈顶指向这个新的结点
ps->count++;
return true;
}

bool pop(PStack ps,int * pVal)
{
if(ps->top == NULL)
{
return false;
}

*pVal = ps->top->data;
PNODE q = ps->top;
ps->top = ps->top->pNext;
ps->count--;
free(q);
q = NULL;
return true;
}

void showStack(PStack ps)
{
PNODE p = ps->top;
while(p != NULL)
{
printf("%d  ",p->data);
p = p->pNext;
}
printf("\n");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  单链表