C#实现顺序栈

栈(Stack)是操作限定在表的尾端进行的线性表。表尾由于要进行插入、删除等操作,所以,它具有特殊的含义,把表尾称为栈顶(Top),另一端是固定的,称为栈底(Bottom)。

栈相当与生活中洗盘子一样,把洗净的盘子一个接一个地往上放(相当于把元素入栈);取用盘子的时候,则从最上面一个接一个地往下拿(相当于把元素出栈)。

下面为栈的接口:

(IDS为各种数据结构的公共接口,包含Count(),IsEmpty(),Clear()三个操作,前面顺序表已经定义过)

using System;
using System.Collections.Generic;
using System.Text;
namespace DateStructrues
{
  /// <summary>
  /// 栈接口
  /// </summary>
  /// <typeparam name="T">泛型</typeparam>
  public interface IStack<T> : IDS<T>
  {
    /// <summary>
    /// 入栈操作
    /// </summary>
    /// <param name="item">泛型:要入栈的元素</param>
    void Push(T item);
    /// <summary>
    /// 出栈操作
    /// </summary>
    /// <returns>出栈的元素</returns>
    T Pop();
    /// <summary>
    /// 取栈顶元素
    /// </summary>
    /// <returns>取出的元素</returns>
    T GetTop();
  }
}

时间: 2024-11-10 01:00:44

C#实现顺序栈的相关文章

顺序栈入栈时输入入栈元素回车之后不能够运行,需要再输入个字节才能运行。预计主函数存在问题。

问题描述 顺序栈入栈时输入入栈元素回车之后不能够运行,需要再输入个字节才能运行.预计主函数存在问题. #include #include #define MAXSIZE 100 //顺序栈的存储空间的初始分配量 #define SElemType int typedef struct { SElemType *base; SElemType *top; int stacksize; } SqStack; //栈的初始化 void InitStack(SqStack *S) { S->base=(

顺序栈的实现示例

栈的顺序实现例子 #ifndef STACK_H_INCLUDED #define STACK_H_INCLUDED #include "ds.h" //for Status,OK ... #ifndef ElemType #define ElemType int /* 数据元素类型默认为 int */ #define ELEMTYPE_TAG #endif #define SElemType ElemType /////////////////////////////////////

小菜一步一步学数据结构之(五)顺序栈

定义 只能在表的一端(栈顶)进行插入和删除运算的线性表 逻辑结构 一对一关系 存储结构 用顺序栈或链栈存储均可,但以顺序栈更常见 运算规则 只能从栈顶运算,且访问结点时依照后进先出(LIFO)或后进后出(FILO)的原则 实现方法 关键是编写入栈和出栈函数,具体实现依顺序栈或链栈的不同而不同 基本操作 入栈 出栈 读栈顶元素值 建栈 判断栈满 栈空 栈与一般线性表的区别 栈是一种特殊的线性表,它只能在表的一端(栈顶)进行插入或删除运算 ** 一般线性 表 栈 逻辑结构 一对一 一对一 存储结构

【数据结构之旅】顺序栈的定义、初始化、空栈判断、入栈、出栈操作

说明:     往前学习数据结构,想运行一个完整的顺序栈的程序都运行不了,因为书上给的都是一部分一部分的算法,并没有提供一个完整可运行的程序,听了实验课,自己折腾了一下,总算可以写一个比较完整的顺序栈操作的小程序,对于栈也慢慢开始有了感觉.下面我会把整个程序拆开来做说明,只要把这些代码放在一个文件中,用编译器就可以直接编译运行了. 一.实现 1.程序功能   关于栈操作的经典程序,首当要提及进制数转换的问题,利用栈的操作,就可以十分快速地完成数的进制转换. 2.预定义.头文件导入和类型别名   

c++-顺序栈的成员函数问题

问题描述 顺序栈的成员函数问题 析构函数-SeqStack( ) {delete[ ]elements;}函数体中删除的是头指针还是删除了数组? 解决方案 删除的是数组.

c++-顺序栈中的重载操作&amp;amp;lt;&amp;amp;lt;

问题描述 顺序栈中的重载操作<< template osrtream& operator<<(ostream& os,SeqStack&s){ os<<"top="<<s.top<<endl; for(int i=0;i<=s.top;i++) os<<i<<":"<<s.elements[i]<<endl; return os;

c++-顺序栈中的清空栈的函数

问题描述 顺序栈中的清空栈的函数 清空栈函数函数体中为何另top=-1,就可清空栈,栈的数据元素不还在内存里吗?怎么能算清空 解决方案 数据虽然还在原来的位置没有消失,但是已经不属于栈的管理范围了 解决方案二: 数组实现的数据还在,在计算机中很多时候都是这样的思想,top= -1就表示了栈已经为空了.比如说当我们删除一个文件时我们直接删除文件的索引,就认为这个文件删除了,但文件的本身的内容并没有删除. 解决方案三: 看你是怎么实现的堆栈,如果是数组,这么做就可以了.如果是动态分配的空间,这么做会

【数据结构之旅】顺序栈入门操作

说明:     书中已有关于顺序栈的类型定义.栈初始化.入栈操作,显然这些都是比较理论的算法,书中并没有给出一个完整可以执行的例子,这对初学者学习在理解上会有一定的难度,因此,需要编写一个简单的例子来理解栈的最基本操作. 1.程序功能     通过使用栈来编写一个程序,实现两个数的交换. 2.程序代码及注释     代码及注释如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 3

c语言-@C语言数据结构大神:顺序栈求n!。13行的错误怎么修改?为啥说我定义栈错误?

问题描述 @C语言数据结构大神:顺序栈求n!.13行的错误怎么修改?为啥说我定义栈错误? # include<stdio.h> # include<stdlib.h> # define Max_Size 50 typedef struct{//typedef是小写开头! //注意此处的top是整形指针 int data[Max_Size]; int top; }SeqStack,*PSeqStack; void Init_SeqStack(PSeqStack S) { S->

数据结构Java实现05----栈:顺序栈和链式堆栈

一.堆栈的基本概念: 堆栈(也简称作栈)是一种特殊的线性表,堆栈的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置进行插入和删除操作,而堆栈只允许在固定一端进行插入和删除操作. 先进后出:堆栈中允许进行插入和删除操作的一端称为栈顶,另一端称为栈底.堆栈的插入和删除操作通常称为进栈或入栈,堆栈的删除操作通常称为出栈或退栈. 备注:栈本身就是一个线性表,所以我们之前讨论过线性表的顺序存储和链式存储,对于栈来说,同样适用.   二.堆栈的抽象数据类型: 数据集合: 堆栈的