链栈
一、链栈定义
栈可以采用链式存储结构表示,采用这种结构表示的栈简称为链栈。
在一个链栈中,栈底就是链表的最后一个节点,而栈顶总是链表的第一个节点。
DataType data;
Struct Stacknode *next;
DataType data;
Struct _Stacknode *next;
StackNode *top;
int len; //栈初始化时,len的值初始化为0
二、程序
1、链栈的C语言定义为:
typedef struct StackNode
{
}linkStack;
linkStack *top;
如果需要记录栈中元素的个数,可将上述链栈的定义改为如下定义形式:
typedef struct _StackNode
{
} StackNode ;
typedef struct _linkStack
{
}linkStack;
2、程序
#include "stdafx.h"
#define DataType char
typedef struct _Stacknode
{
DataType data;
struct _Stacknode *next;
}LinkStack;
LinkStack* push(LinkStack *top, DataType x);
DataType pop(LinkStack **top);
int _tmain(int argc, _TCHAR* argv[])
{
LinkStack *Top = NULL; //栈顶top
DataType data;
Top = push(Top, 'a');
data = pop(&Top);
return 0;
}
//入栈操作
//将元素x压入链栈的top中(注意这里虽然有top = p,但是传到函数里的top指针并不会改变,因为函数里top的副本_top指向了新的内存,只是把_top 所指的内存地址改变了,但是top丝毫未变)
LinkStack* push(LinkStack *top, DataType x)
{
LinkStack *p;
p = (LinkStack *)malloc(sizeof(LinkStack));
if (p == NULL)
{
return NULL;
}
p->data = x;
p->next = top;
top = p;
return top;
}
//出栈操作
//从链栈top中删除栈顶元素(这里要改变Top值,参数必须是指向指针的指针,输入的是Top(指向栈顶指针)的地址,原因与上面一样)
DataType pop(LinkStack **top)
{
LinkStack *p;
DataType x;
if (top == NULL)
{
return NULL;
}
p = *top;
x = (*top)->data;
*top = (*top)->next;
free(p);
return x;
}