链栈

一、链栈定义
    栈可以采用链式存储结构表示,采用这种结构表示的栈简称为链栈。
    在一个链栈中,栈底就是链表的最后一个节点,而栈顶总是链表的第一个节点。

    链栈

二、程序
1、链栈的C语言定义为:
typedef  struct StackNode
{
    DataType data;
    Struct Stacknode  *next;
}linkStack;
linkStack *top;

如果需要记录栈中元素的个数,可将上述链栈的定义改为如下定义形式:
typedef  struct _StackNode
{
    DataType data;
    Struct _Stacknode  *next;
} StackNode ;

typedef struct _linkStack
{
    StackNode  *top;
    int  len;                       //栈初始化时,len的值初始化为0
}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;
}

posted @ 2016-03-24 16:04  SuperThinker  阅读(9)  评论(0编辑  收藏  举报  来源