栈的基本操作和应用
来源:互联网 发布:八种调度算法 编辑:程序博客网 时间:2024/06/16 12:30
栈的基本操作和应用
一、栈的顺序存储
实现代码:
#include <iostream> using namespace std; #define MAX 120//栈最大容量 class stack { private: int arr[MAX]; int top; public: void inItStack() { top=-1; } stack() { inItStack(); } bool isEmpty() { if(top == -1) return true; else return false; } void push(int a) { top++; if(top < MAX) { arr[top]=a; }else{ cout<<"栈已满,无法存入"<<a<<endl; } } int pop() { if(isEmpty()) { cout<<"STACK IS EMPTY "; return NULL; } else { int data=arr[top]; arr[top]=NULL; top--; return data; } } }; int main() { int i; stack a; for(i=0;i<120;i++){ a.push(i); } cout<<"Pop:"<<a.pop()<<endl; a.push(120);//由于前面一行,出栈了一个数,所以还可以入栈一个 a.push(121);//继续入栈则会报错 cout<<"Pop:"<<a.pop()<<endl; return 0; }
输出结果:
Pop:119栈已满,无法存入121Pop:120请按任意键继续. . .
二、栈的链式存储
实现代码:
#include<iostream>#include<malloc.h>#define maxsize 100using namespace std;typedef struct node{int data;struct node *next;}lnode ,*linkstack;//初始化栈void init(linkstack *top){if( ( (*top)=(linkstack)malloc(sizeof(lnode)) )==NULL )//(给*top分配一个存储空间让top指向这个空间) exit(-1);(*top)->next=NULL;} //判断是否为空int empty(linkstack top){if(top->next==NULL)return 1;else return 0;}//取出栈顶元素 int get(linkstack top,int *e){lnode *p;p=top->next; if(!p){cout<<"栈已空!";return 0;}else{*e=p->data;cout<<*e<<endl;return *e;}}//入栈操作 int push(linkstack top,int e){ lnode *p;if( (p=(linkstack)malloc(sizeof(lnode)))==NULL )//(给*top分配一个存储空间让top指向这个空间) {printf("分配内存失败");exit(-1);return 0;}p->data=e;p->next=top->next;top->next=p;return 1;}int pop1(linkstack top,int *e){linkstack p=top->next;if(p==NULL){cout<<"栈已空!";return 0; }top->next=p->next;*e=p->data;free(p);return 1;}int length(linkstack top){int i=0;lnode *p=top;while(p->next!=NULL){p=p->next;i++;}return i;}void clear(linkstack top){lnode *p,*q;p=top;while(!p){q=p;p=p->next;free(q);}}int main(){linkstack s;lnode *p;int i;int a[]={1,2,3};int e;init(&s);cout<<"将1 2 3依次入栈!"<<endl; for(i=0;i<sizeof(a)/sizeof(a[0]);i++){push(s,a[i]);}cout<<"栈顶元素为:";if(get(s,&e)==0){cout<<"栈为空";return 0; }cout<<"将4入栈"<<endl; push(s,4);cout<<"将5入栈"<<endl; push(s,5);cout<<"栈中元素个数为:"<<length(s)<<endl;cout<<"将5出栈"<<endl; pop1(s,&e); cout<<"将4出栈"<<endl;pop1(s,&e);cout<<"将3出栈"<<endl;pop1(s,&e); cout<<"栈中元素个数为:"<<length(s);cout<<endl;cout<<"出栈元素的序列:";while(!empty(s)){pop1(s,&e);cout<<e<<" ";}cout<<endl;}
输出结果:
将1 2 3依次入栈!栈顶元素为:3将4入栈将5入栈栈中元素个数为:5将5出栈将4出栈将3出栈栈中元素个数为:2出栈元素的序列:2 1请按任意键继续. . .三、栈的项目实践:
#include <stdio.h> #include <stdlib.h> #include <conio.h> #define N 10 typedef struct { int data[N];//栈的元素 int top; //数组的下标,表示栈顶下标 }srack; //初始化栈 void initsrack(srack *s) { s->top=-1; } //判断栈是否为空 void srackempty(srack *s) { if (s->top==-1) printf("栈为空\n"); else printf("栈不为空\n"); } //删除栈顶元素 void pop(srack *s) { int e; if (s->top==-1) printf("栈为空"); else { e=s->data[s->top]; s->top--; printf("删除元素%d后还剩%d个元素\n",e,s->top+1); } } //入栈 void push(srack *s) { if (N-s->top==1)//栈满 { printf("栈已满\n"); } else { printf("输入进栈的值:"); scanf("%d",&s->data[++s->top]); printf("入栈成功\n"); } } void print() { printf("输入口令:\n"); printf("1.判断栈是否为空\n"); printf("2.入栈\n"); printf("3.显示栈元素个数以及栈顶元素\n"); printf("4.删除栈顶元素\n"); printf("5.退出\n\n\n"); } void display(srack *s) { if (s->top==-1) printf("栈为空"); else printf("此时栈有%d个元素,栈顶元素为%d\n",s->top+1,s->data[s->top]); } int main() { print();//显示菜单 int n;//口令变量 int c=1; srack *s; s=(srack*)malloc(sizeof(srack)); initsrack(s);//初始化栈 while (c) { printf("\n输入操作口令:\n"); scanf("%d",&n); system("cls");//清屏 print(); switch(n) { case 1:srackempty(s);break;//判断栈是否为空 case 2:push(s);break;//入栈 case 3:display(s);break;//显示 case 4:pop(s);break;//出栈 case 5:c=0; } } }
阅读全文
0 0
- C++栈的基本操作和应用
- 栈的基本操作和应用
- 7.6 栈与队列-栈的基本操作和应用
- 栈和队列的基本操作及其应用
- HDU 1022 栈的基本操作应用
- 栈的基本操作及应用
- MATLAB学习之基本操作和在高等数学的应用
- 实验4:栈和队列的基本操作实现及其应用之《顺序栈》
- 实验4:栈和队列的基本操作实现及其应用之《顺序栈》
- 实验三:栈和队列的基本操作实现及其应用——顺序栈
- 实验4:栈和队列的基本操作实现及其应用之《顺序栈》
- 实验三 栈和队列的基本操作实现及其应用
- 实验4:栈和队列的基本操作实现及其应用——链栈
- 实验三 栈和队列的基本操作实现及其应用
- 实验4:栈和队列的基本操作实现及其应用——循环队列
- 实验4:栈和队列的基本操作实现及其应用——链队列
- 实验4:栈和队列的基本操作实现及其应用之《链栈》
- 实验4:栈和队列的基本操作实现及其应用之《循环队列》
- sql server 2005 32位+64位、企业版+标准版、CD+DVD 下载地址大全
- qt TCP接收数据遇到的问题
- bzoj 1596(树形dp)
- 【Leetcode-easy-448】Find All Numbers Disappeared in an Array
- WebView加载百度网页
- 栈的基本操作和应用
- Google、亚马逊、微软和 IBM 如何把 AI 服务卖出去?
- 熊猫学猿--第二竹搭建PHP环境
- Oracel alert table 笔记
- Tomcat在Linux上的安装与配置
- Revit API改变风管及管件尺寸(2014)
- PL/SQLDeveloper配置使用说明
- MyEclipse快捷键大全(熟能生巧)
- Linux常用命令