数据结构与经典算法(二)

来源:互联网 发布:c语言怎么编程游戏 编辑:程序博客网 时间:2024/05/18 02:38

第三章、栈
栈是一种特殊的线性表,一般来说在线性表的插入删除不受控制,而栈上的插入删除操作会受限制,栈的插入和删除操作是在童一端进行的。
一、栈
1.基本概念
栈是仅限定在表的一端进行插入或删除操作的线性表。
允许插入和删除操作的顶端称为栈顶,处于栈顶位置的元素称为栈顶元素。相应的称为栈底。栈中含有的元素个数称为栈长;不含元素的空表称为空栈。
由于栈的插入和删除运算仅在栈顶一端进行,后进栈的元素必定先出栈,所以又把栈称为后进先出表(Last In First Out, 简称LIFO)。
2.栈的顺序存储结构
栈既然是一种线性表,所以线性表的顺序存储和链接存储结构同样适用于栈。
栈的顺序存储结构同样需要使用一个数组和一个整型变量来实现,利用数组来顺序存储栈中的所有元素,为了方便将数组的最后一个元素作为栈顶;利用整型变量top来存储栈顶元素的下标,其作用相当于栈顶指针,若top初始值为-1则表示空栈。
栈的基本操作
(1)初始化操作:生成长为len的非空栈,len不能超过数组的最大长度

#include "stdio.h"#define maximum 100   /*最大空间*/int top=-1;Datatype stack[maximum];
void CreatStack(int *stack,int len)   //创建顺序栈{        if(len>maximum)        {            printf(""长度超过最大限制);            return;        }        int value;        for(int count=0;count<len;count++)        {            scanf("%d",&value);            stack[count]=value;            top++;        }}

(2)入栈操作:
首先将top指针后移一位即值+1,然后在此处插入新元素x;当top==maximum-1的时候,表示栈满,不能插入

void Push(int *h,int value){      if(top==maximum-1)      {            printf("栈满");            return;      }      top++;      h[top]=value;      return;}

(3)出栈操作:
首先将top指针处元素x出栈;top值-1;

void Pop(int *hint *e)     //e存放出站元素的值{      if(top==-1)      {            printf("栈空");            return;      }      *e=h[top];      top--;      return;}

(4)计算栈长:
栈长=top+1(由于top表示数组下表,从0开始)

int StackLength()     //e存放出站元素的值{      return(top+1);}

回头再看

0 0
原创粉丝点击