/*栈的链式存储结构*/
#include <STDIO.H>
#include <STDLIB.H>
#include <MATH.H>
#define OK 1
#define ERROR 0
/*链式结构定义*/
typedef struct stacknode
{
int data;//存储节点的数据
struct stacknode *next;//指向下一个结点的指针.
}stacknode,*linkstackptr;//stacknode为定义的结构体类型名,linkstackptr为结构体类型的指针类型.
typedef struct
{
linkstackptr top;//top为linkstackptr型指针变量.
int count;
}linkstack;//linkstack为结构体类型名.
/*链栈的入栈操作*/
/********************************************************
* 函数名: int push(linkstack *S,int e)
* 函数功能:元素出栈操作.
* 输入参数:linkstack *S,int e
* 输出参数:int
* 附加说明:
* 作者:YL
* 当前版本: v_1
* 完成日期: 2014-03-15
/********************************************************/
int push(linkstack *S,int e)
{
linkstackptr s=(linkstackptr)malloc(sizeof(stacknode));//开辟一个结点大小的内存,头指针s指向这个结点.
s->data=e;//将要压栈的元素赋值给新结点.
s->next=S->top;//
S->top=s;//将头指针指向栈顶.
S->count++;//栈内的元素个数加一.
return OK;
}
/*链栈的出栈操作*/
/********************************************************
* 函数名: int push(linkstack *S,int e)
* 函数功能:元素出栈操作.
* 输入参数:linkstack *S,int e
* 输出参数:int
* 附加说明:
* 作者:YL
* 当前版本: v_1
* 完成日期: 2014-03-15
/********************************************************/
int pop(linkstack *S,int *e)
{
linkstackptr p;
if(S->count==0)
return ERROR;
*e=S->top->data;//将要删除的栈顶元素赋值给e.
p=S->top;
S->top=S->top->next;//将top指针指向下一个结点.
S->count--;//个数减1.
free(p);//释放被删除的结点的内存.
return OK;
}
void main()
{
}
栈的链式存储。。。2014.5.11
最新推荐文章于 2022-10-13 12:05:34 发布