您的位置:首页 > 理论基础 > 数据结构算法

数据结构之线性结构(链栈)【七】

2011-08-01 16:37 295 查看
链栈

  栈的链式存储结构称为链栈。

1、链栈的类型定义

  链栈是没有附加头结点的运算受限的单链表。栈顶指针就是链表的头指针。

链栈的类型说明如下:

typedef struct stacknode{

DataType data

struct stacknode *next

}StackNode;

typedef struct{

StackNode *top; //栈顶指针

}LinkStack;

注意:

  ①LinkStack结构类型的定义是为了方便在函数体中修改top指针本身

 ②若要记录栈中元素个数,可将元素个数属性放在LinkStack类型中定义。

2、链栈的基本运算

(1) 置栈空

Void InitStack(LinkStack *S)

{

S->top=NULL;

}

(2) 判栈空

int StackEmpty(LinkStack *S)

{

return S->top==NULL;

}

(3) 进栈

void Push(LinkStack *S,DataType x)

{//将元素x插入链栈头部

StackNode *p=(StackNode *)malloc(sizeof(StackNode));

p->data=x;

p->next=S->top;//将新结点*p插入链栈头部

S->top=p;

}

(4) 退栈

DataType Pop(LinkStack *S)

{

DataType x;

StackNode *p=S->top;//保存栈顶指针

if(StackEmpty(S))

Error("Stack underflow."); //下溢

x=p->data; //保存栈顶结点数据

S->top=p->next; //将栈顶结点从链上摘下

free(p);

return x;

}

(5) 取栈顶元素

DataType StackTop(LinkStack *S)

{

if(StackEmpty(S))

Error("Stack is empty.")

return S->top->data;

}

注意:

  链栈中的结点是动态分配的,所以可以不考虑上溢,无须定义StackFull运算。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: