堆栈的初识
来源:互联网 发布:windows自带放大镜 编辑:程序博客网 时间:2024/06/05 23:41
堆栈(Stack)是一种简单和常用的数据结构,用户只能在指定的一端插入元素,并在同一端删除元素,因而元素的插入和删除具有后进先出LIFO(Last-In-First-Out)的特性。
基本知识
允许插入和删除元素的一端称为栈顶,而另外一端称为栈底。若栈中无元素,则称为空栈。
常见的基本运算:
#include<stdio.h>#define Maxsize 50#define FALSE 0#define TRUE 1typedef int BOOL;typedef int T;typedef struct stack{ int Top,Maxstack; //栈的最大允许长度为Maxstack,Top指向栈顶元素 T Elements[Maxsize];}Stack;//构造一个空栈,令栈顶指针Top=-1.栈的容量是Maxstack由用户通过参数maxsize指定,但是不能超过Maxsize void CreateStack(Stack *s,int maxsize){ s->Top=-1; s->Maxstack=maxsize;} //若栈为空,则返回TRUE,否则返回FALSE BOOL IsEmpty(Stack s){ return s.Top<0;}//若堆栈已满,则返回TRUE,否则返回FALSEBOOL IsFull(Stack s){ return s.Top>=s.Maxstack-1;} //进栈,若堆栈已满,则输出OVERFLOW,否则值为x的新元素进栈,成为栈顶元素 void Push(Stack *s,T x){ if(IsFull(*s)) printf("OVERFLOW"); else s->Elements[++s->Top]=x;}//出栈,若堆栈为空,则输出UNDERFLOW,否则栈顶元素从栈中删除 void Pop(Stack *s){ if(IsEmpty(*s)) printf("UNDERFLOW"); else s->Top--; }//返回栈顶元素值,若堆栈为空,则输出UNDERFLOW,否则在参数x中返回栈顶元素值 void StackTop(Stack s,T *x){ if(IsEmpty(s)) printf("UNDERFLOW"); else *x=s.Elements[s.Top];} //输入一个整数 T* InputElement(){ printf("请输入一个整数:\n"); int a; scanf("%d",&a); return &a;}//输出栈内元素 void PrintStack(Stack s){ int i; if(IsEmpty(s)){ printf("UNDERFLOW\n"); return; } for(i=0;i<=s.Top;i++) printf("%5d",s.Elements[i]); printf("\n");}int main(){ Stack s; T x; T *a; CreateStack(&s,10); //构造一个容量为10的空整数栈 Push(&s,10);Push(&s,15); //在栈中依次压入元素10和15 PrintStack(s); //显示栈中元素 a=InputElement(); //调用InputElement函数接受键盘输入并奖其赋给x x=*a; Push(&s,x); //将元素x进栈 PrintStack(s); //显示栈中元素 StackTop(s,a); printf("%d\n",*a); //显示栈顶元素值 Pop(&s);Pop(&s); //在栈中依次弹出两个元素 if(IsEmpty(s)) //判断此时栈是否为空栈 printf("Is empty!\n"); else printf("Is not empty!\n"); PrintStack(s); //显示栈中元素 return 0;}
还可以求栈的长度,清除一个栈,遍历一个栈等,需要后续补充。
0 0
- 堆栈的初识
- 初识JVM中堆栈的存储
- 初识c#---泛型集合,哈希表,堆栈,队列,索引器
- 数据结构的堆栈和内存的堆栈
- 堆栈,堆栈,堆和栈的区别
- 堆栈,堆栈,堆和栈的区别
- 堆栈,堆栈,堆和栈的区别
- 堆栈,堆栈,堆和栈的区别
- 堆栈,堆栈,堆和栈的区别
- 堆栈,堆栈,堆和栈的区别
- 任务0的内核堆栈,用户堆栈
- 堆栈,堆栈,堆和栈的区别
- 堆栈,堆栈,堆和栈的区别
- 堆栈,堆栈,堆和栈的区别
- 堆栈,堆栈,堆和栈的区别
- 堆栈,堆栈,堆和栈的区别
- 堆栈,堆栈,堆和栈的区别
- 堆栈,堆栈,堆和栈的区别
- POJ 3660 Cow Contest (floyd 传递闭包)
- Activity声明周期的完全解析
- 基数排序
- 算法提高 日期计算&算法提高 5-3日历
- computer vision resource library
- 堆栈的初识
- tableHeaderView中的button点击事件不响应
- putty 下 sqlite3 输出的中文乱码解决办法
- python源代码剖析--读书笔记:第1章 Python内建对象
- 设计模式(八)过滤器模式
- Web-常见错误整理
- Linux 命令实现单词计数功能
- Codeforces Round #403 (Div. 2) C. Andryusha and Colored Balloons DFS
- java通过smtp发送qq邮件详细步骤