Chinaunix首页 | 论坛 | 博客
  • 博客访问: 122026
  • 博文数量: 32
  • 博客积分: 506
  • 博客等级: 下士
  • 技术积分: 257
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-11 11:06
文章分类

全部博文(32)

文章存档

2012年(32)

分类: C/C++

2012-10-23 11:28:03

栈和队列是两种特殊的线性表,它们的逻辑结构和线性表相同,只是其运算规则较线性表有更多的限制,故又称它们为运算受限的线性表。栈和队列被广泛应用于各种程序设计中。
 
栈的定义
     栈(Stack)是限制仅在表的一端进行插入和删除运算的线性表。
  (1)通常称插入、删除的这一端为栈顶(Top),另一端称为栈底(Bottom)。
  (2)当表中没有元素时称为空栈
  (3)栈为后进先出(Last In First Out)的线性表,简称为LIFO表
     栈的修改是按后进先出的原则进行。每次删除(退栈)的总是当前栈中"最新"的元素,即最后插入(进栈)的元素,而最先插入的是被放在栈的底部,要到最后才能删除。
 
1顺序栈(略)栈的顺序存储结构简称为顺序栈,它是运算受限的顺序表。
 
2链栈:栈的链式存储结构称为链栈。
(1),链栈的类型定义:
   

点击(此处)折叠或打开

  1. typedef struct stacknode{
  2.     DataType data;
  3.     struct stacknode *next;
  4. }StackNode; //节点定义

  5. typedef struct{
  6.     StackNode *top;
  7. }LinkStack; //栈顶指针定义
(2)置栈空

点击(此处)折叠或打开

  1. void InitStack(LinkStack *s)
  2. {
  3.    s->top = NULL;
  4. }
(3)判栈空

点击(此处)折叠或打开

  1. int StackEmpty(LinkStack *s)
  2. {
  3.     return s->top == NULL;
  4. }
(4)进栈

点击(此处)折叠或打开

  1. void Push(LinkStack *s,DataType x)
  2. {
  3.     StackNode *p = (StackNode *)malloc(sizeof(StackNode))
  4.     p->data = x;
  5.     p->next = s->top;
  6.     s->top = p;
  7. }
(5)出栈

点击(此处)折叠或打开

  1. DataType Pop(LinkStack *s)
  2. {
  3.     DataType x;
  4.     StackNode *p = s->top;
  5.     if(StackEmpty(s))
  6.         Error("Stack underflow");//出错退出
  7.     x = p->data;
  8.     s->top = p->next;
  9.     free(p);
  10.     return x;
  11. }
(6)取栈顶元素

点击(此处)折叠或打开

  1. DataType StackTop(LinkStack *s)
  2. {
  3.     StackNode *p = s->top;
  4.     if(StackEmpty(s))
  5.         Error("Stack underflow");//出错退出
  6.     return p->data;
  7. }
注意:
    
链栈中的结点是动态分配的,所以可以不考虑上溢,无须定义StackFull运算。 

原文:


     
 
阅读(1239) | 评论(0) | 转发(1) |
0

上一篇:单链表-学习

下一篇:队列(queue)的学习

给主人留下些什么吧!~~