顺序栈:话不多说直接上代码
#include<iostream> #include<stdio.h> #include<stdlib.h> #include<assert.h> using namespace std; const int maxsize=50; //注意节点的内容即可 typedef struct { int data[maxsize]; int top; }stack; //初始化 void initStack(stack* p){ p->top=-1; } //判空 bool empty(stack* p){ if(p->top>=0) return false; else return true; } //进栈 void push(stack *p,int num){ if(p->top==maxsize-1){ cout<<"栈满"<<endl; return; } else{ p->top++; p->data[p->top]=num; } } //取栈顶元素 int top(stack* p){ if(empty(p)){ cout<<"stack is empty"<<endl; return NULL; }else{ return p->data[p->top]; } } //退栈 int pop(stack* p){ if(empty(p)){ cout<<"stack is empty"<<endl; return NULL; } else{ p->top--; return(p->data[p->top+1]); } } int main(){ stack* p=new stack; int a[5]={1,5,3,12,31}; initStack(p); if(empty(p)) cout<<"该栈是空栈"<<endl; for(int i=0;i<5;i++) push(p,a[i]); cout<<top(p)<<endl; cout<<pop(p)<<endl; system("pause"); return 1; }
链栈:只能在链表头部进行操作,所以没有必要附加头结点,栈顶指针就是链表的头指针。其实也可以带头结点,
可以按照需求来定义,话不多述,直接代码
typedef struct node{ int data; struct node* next; }linkstack; void initStack(linkstack* p){ p->next=NULL; } bool empty(linkstack* p){ if(p->next==NULL) return true; else return false; } void push(linkstack* p,int num){ linkstack *q=new linkstack; if(q==NULL) return; q->data=num; //栈使用的是头插法 q->next=p->next; p->next=q; } int gettop(linkstack* p){ if(p->next==NULL){ cout<<"栈为空"<<endl; return NULL; } else{ return p->next->data; } } int pop(linkstack* p){ if(p->next==NULL){ cout<<"栈为空"<<endl; return NULL; } linkstack* q; int data; q=p->next; data=p->next->data; p->next=q->next; free(q);//释放内存 return data; } int main(){ linkstack* p=new linkstack; int a[5]={1,12,22,31,2}; initStack(p); if(empty(p)) cout<<"该栈是空栈"<<endl; for(int i=0;i<5;i++) push(p,a[i]); cout<<"栈首元素是:"<<gettop(p)<<endl; while(!empty(p)){ cout<<pop(p)<<"出栈"<<endl; } system("pause"); return 1; }
发表评论
-
析构函数为虚函数的原因
2012-09-09 11:42 830我们知道,用C++开发的时候,用来做基类的类的析构函数 ... -
hash的应用
2012-08-31 23:02 959第一部分为一道百度面试题Top K算法的详解;第二部分为关 ... -
微软智力题
2012-08-29 19:59 565第一组1.烧一根不均匀的绳,从头烧到尾总共需要1个小时。现在有 ... -
C++不能被继承的类
2012-08-27 20:16 1055一个类不能被继承, ... -
括号对齐问题
2012-08-27 10:47 1406解法一:左右括号成一对则抵消 可以 ... -
树的遍历
2012-08-19 10:43 717/****************************** ... -
堆排序
2012-08-16 14:24 882堆:(二叉)堆数据结构是一种数组对象。它可以被视为一棵完全 ... -
多态赋值
2012-08-14 16:16 828#include <iostream> usi ... -
static变量与static函数(转)
2012-08-13 10:15 743一、 static 变量 static变量大致分为三种用法 ... -
不用sizeof判断16位32位
2012-08-10 15:21 1700用C++写个程序,如何判断一个操作系统是16位还是3 ... -
找出连续最长的数字串(百度面试)
2012-08-09 15:15 1144int maxContinuNum(const char*in ... -
队列的数组实现和链表实现
2012-08-05 16:20 1023话不多少,数组实现上代码: #include<i ... -
KMP算法详解
2012-08-02 21:40 880KMP算法: 是在一个“主文本字符串” ... -
字符串的最长连续重复子串
2012-08-01 15:05 9768两种方法: 循环两次寻找最长的子串: <方法一> ... -
寻找一个字符串连续出现最多的子串的方法(转)
2012-07-31 21:19 974算法描述首先获得后缀数组,然后1.第一行第一个字符a,与第二行 ... -
字符串的循环移位
2012-07-31 16:52 974假设字符串:abcdefg 左循环两位:cdefgab 右 ... -
一次谷歌面试趣事(转)
2012-07-31 15:26 763很多年前我进入硅谷 ... -
约瑟夫环问题(循环链表)
2012-07-30 21:31 1286题目描述:n只猴子要选大王,选举方法如下:所有猴子按 1, ... -
面试之单链表
2012-07-30 20:18 7241、编程实现一个单链表的建立/测长/打印。 ... -
多重继承内存地址问题
2012-07-30 15:55 725[cpp] view plaincopy ...
相关推荐
本项目中,模版类被用来实现两种常见的数据结构——顺序栈和链栈,这两种栈都遵循后进先出(LIFO)的原则。下面我们将详细探讨这些知识点。 首先,**顺序栈**是基于数组实现的栈。在C++中,可以定义一个名为`...
### 数据结构课程:顺序栈和链栈的实现 #### 栈的基本概念 栈是一种特殊的线性表,其特殊之处在于所有元素的插入和删除都只能在一端进行,这一端被称为栈顶(top),与之相对的一端称为栈底(bottom)。栈通常支持以下...
本主题主要探讨两种常见的栈实现:顺序栈和链栈。栈是一种特殊的线性数据结构,遵循“后进先出”(LIFO)的原则,即最后入栈的元素最先出栈。 首先,我们来详细了解一下顺序栈。顺序栈是用一维数组来实现的栈,其...
1、 会定义顺序栈和链栈的结点类型。 2、 掌握双向栈的结构特点及其在一维数组中的实现。 3、 掌握在双向栈中进行插入和删除元素的方法。 二、 实验要求 1、 定义栈的存储结构。 2、 编写程序实现双向栈的基本操作...
本文将详细讨论在C语言中如何实现栈,包括顺序栈和链栈,并基于提供的文件名来解析它们的实现。 1. **顺序栈**:顺序栈是通过数组来实现的,其优点在于存储空间连续,访问速度快。`stack_array.c`和`stack_array.h`...
本话题聚焦于一种特定的应用——使用C++实现的顺序栈和链栈,将10进制数转换为2、8、16进制。这里我们将深入探讨顺序栈和链栈的概念,以及它们如何应用于不同进制之间的转换。 首先,顺序栈是一种基于数组的数据...
顺序栈和链栈的插入和删除实验报告 一、顺序栈和链栈的概念 顺序栈是一种线性数据结构,它使用数组来存储元素,每个元素按照顺序存储在数组中。链栈是一种链式数据结构,它使用链表来存储元素,每个元素都是一个...
本文将详细介绍顺序栈和链栈的实现,包括它们的数据结构、操作和应用。 一、顺序栈 顺序栈是一种基于数组的栈实现,它使用一个数组来存储栈中的元素。顺序栈的优点是访问速度快、实现简单,但是它存在一个固定的...
在这个主题中,我们将专注于栈(Stack)这一特殊的数据结构,及其在实际应用中的两种主要实现方式:顺序栈(Sequential Stack)和链栈(Linked Stack)。栈通常被称为“后进先出”(LIFO,Last In First Out)的数据...
自己定义的栈的接口,完全是按照栈的常用方法以及命名方式实现: 注意以下类,接口都是在一个命名空间下 ...顺序栈的实现,参照顺序表实现 namespace 栈 { class SeqStack<T> : IStackDS { pr
本文将深入探讨两种常见的栈实现方式:链栈和顺序栈,并通过提供的源码文件来理解它们的实现细节。 1. **链栈**: 链栈是基于链表实现的栈,其元素存储在一系列分散的内存位置中,每个元素(节点)包含一个数据...
总结,顺序栈和链栈都是实现栈数据结构的有效方式,各有优缺点。顺序栈在空间管理上简单,但可能受限于预设的大小;链栈虽然需要额外的指针存储空间,但能灵活扩展,适应性强。在实际应用中,选择哪种实现方式取决于...
1、 定义栈的存储结构。 2、 编写程序实现双向栈的基本操作:1)初始化;2)判断栈是否为空;3)判断栈是否已满;4)入栈;5)出栈;6)清空栈;7)取栈顶元素。 3、 所写源代码编程风格良好,有详细注释。 4、 程序...
停车场管理系统(C语言顺序栈+链栈+链队列)
数据结构顺序栈链栈 根据提供的文件信息,我们可以总结出以下知识点: 1. 顺序栈的定义和实现: ...数据结构顺序栈链栈的实验报告需要涵盖栈的定义和实现、栈的应用、实验报告的要求、数据结构的应用等方面的知识点。
### 数据结构C++:顺序栈、链栈、循环队列、链队列的主要操作 #### 一、概述 本文档提供了使用C++编程语言实现的数据结构中的栈与队列的操作详解,具体包括顺序栈、链栈、循环队列、链队列四种结构的基本操作,并...
在这个实验中,主要探讨了四种数据结构:顺序栈、链栈、循环队列和链队列,这些都是在编程实践中常用的抽象数据类型。 首先,我们来看顺序栈。顺序栈是一种线性数据结构,它的特点是元素按照特定的顺序存储在一块...