C#数据结构:链栈

  • 1、自定义链栈结构:
  • 链栈节点类
using System.Collections;
using System.Collections.Generic;
using UnityEngine; /// <summary>
/// 链栈节点类
/// </summary>
/// <typeparam name="T"></typeparam>
public class LinkStackNode<T>
{
private T data;//数据 private LinkStackNode<T> next; //指针,下个元素 public T Data
{
get
{
return data;
} set
{
data = value;
}
} public LinkStackNode<T> Next
{
get
{
return next;
} set
{
next = value;
}
} public LinkStackNode()
{
this.data = default(T);
this.next = null;
} public LinkStackNode(T _data, LinkStackNode<T> _next)
{
this.data = _data;
this.next = _next;
} public LinkStackNode(T _data)
{
this.data = _data;
this.next = null;
} public LinkStackNode(LinkStackNode<T> _next)
{
this.next = _next;
this.data = default(T);
} }

  • 链栈类
using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class LinkStack<T>
{
private LinkStackNode<T> top;//栈顶头指针 private int count;//栈中元素个数 public int Count
{
get
{
return count;
} set
{
count = value;
}
} //初始化栈
public LinkStack()
{
top = new LinkStackNode<T>();
count = 0;
} //判栈空
public bool IsEmpty()
{
return (Count == 0)&&(top.Next==null);
} //进栈
public void Push(T item)
{
LinkStackNode<T> newNode = new LinkStackNode<T>(item);
if(newNode==null)
{
return;
}
newNode.Next = top.Next;
top.Next = newNode;
Count++;
} //出栈
public T Pop()
{
if(IsEmpty())
{
throw new System.Exception("栈空,无法出栈!");
}
LinkStackNode<T> currentTopNode = top.Next;
top.Next = currentTopNode.Next;
Count--;
return currentTopNode.Data;
} //访问栈顶元素
public T Peek()
{
if (IsEmpty())
{
throw new System.Exception("栈空,无法访问栈顶!");
}
return top.Next.Data;
} //清空栈
public void Clear()
{
top.Next=null;
Count = 0;
} }

  • 链栈测试用例:
using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class _006_LinkStack : MonoBehaviour
{ LinkStack<string> linkStack; void Start()
{
//初始化链栈
linkStack = new LinkStack<string>(); //判空
Debug.Log("链栈是否空:" + linkStack.IsEmpty()); //进栈
Debug.Log("进栈:" + "1,2,3,4");
linkStack.Push("1");
linkStack.Push("2");
linkStack.Push("3");
linkStack.Push("4"); //判空
Debug.Log("链栈是否空:" + linkStack.IsEmpty()); //栈中元素个数
Debug.Log("链栈中元素个数: " + linkStack.Count); //出栈
Debug.Log("出栈-----出栈值为:" + linkStack.Pop()); //栈中元素个数
Debug.Log("出栈后,链栈中元素个数: " + linkStack.Count); //访问栈顶元素
Debug.Log("链栈顶元素值: " + linkStack.Peek()); //栈中元素个数
Debug.Log("访问链栈顶后,链栈中元素个数: " + linkStack.Count); //清空栈
linkStack.Clear();
Debug.Log("清空链栈!"); //栈中元素个数
Debug.Log("清空链栈后,栈中元素个数: " + linkStack.Count);
} }

输出结果:

注意:

1、链栈即采用链表作为存储结构实现的栈。为便于操作,这里采用带头结点的单链表实

现栈。由于栈的插入和删除操作仅限制在表头位置进行,所以链表的表头指针就作为栈顶指

针,如下图所示。

2、在上图中,top 为栈顶指针,始终指向当前栈顶元素前面的头结点。若 top->next=NULL,

则代表栈空。采用链栈不必预先估计栈的最大容量,只要系统有可用空间,链栈就不会出现

溢出。采用链栈时,栈的各种基本操作的实现与单链表的操作类似,对于链栈,在使用完毕

时,应该释放其空间。

【C#】【数据结构】006-栈:链栈的更多相关文章

  1. 数据结构——Java实现链栈

    一.分析 栈是限定仅在表的一端进行插入或删除操作的线性表,对于栈来说,操作端称为栈顶,另一端则称为栈底,栈的修改是按照后进先出的原则进行的,因此又称为后进先出的线性表. 链栈是指采用链式存储结构实现的 ...

  2. 顺序栈,链栈,队列java实现

    顺序栈 /** * 顺序栈 * */ public class SqStack { //栈的大小 private int maxSize; //栈顶指针 private int top; privat ...

  3. java与数据结构(6)---java实现链栈

    栈之链式存储结构链栈 链栈 栈的链式存储结构成为链栈.链栈是没有头结点,头结点就是栈顶指针top. 代码结构 package list; public interface Stackable;公共接口 ...

  4. c/c++ 链栈

    c/c++ 链栈 链栈 下面的代码实现了以下功能 函数 功能描述 push 压入 pop 弹出 show_list 打印 clear 释放所有内存空间 destroy 释放所有内存空间 nodesta ...

  5. 数据结构 - 链栈的实行(C语言)

    数据结构-链栈的实现 1 链栈的定义 现在来看看栈的链式存储结构,简称为链栈. 想想看栈只是栈顶来做插入和删除操作,栈顶放在链表的头部还是尾部呢?由于单链表有头指针,而栈顶指针也是必须的,那干吗不让它 ...

  6. 数据结构——链栈(link stack)

    /* linkStack.c */ /* 链栈 */ #include <stdio.h> #include <stdlib.h> #include <stdbool.h ...

  7. 数据结构实验3:C++实现顺序栈类与链栈类

      实验3 3.1 实验目的 熟练掌握栈的顺序存储结构和链式存储结构. 熟练掌握栈的有关算法设计,并在顺序栈和链栈上实现. 根据具体给定的需求,合理设计并实现相关结构和算法.3.2实验要求3.2.1 ...

  8. C语言数据结构链栈(创建、入栈、出栈、取栈顶元素、遍历链栈中的元素)

    /**创建链栈*创建一个top指针代表head指针*采用链式存储结构*采用头插法创建链表*操作 创建 出栈 入栈 取栈顶元素*创建数据域的结构体*创建数据域的名称指针*使用随机函数对数据域的编号进行赋 ...

  9. 数据结构 - 链栈的实现 C++

    链栈封装 C++ 使用C++对链栈进行了简单的封装,实现了栈的基本操作 封装方法: pop(),top(),size(),empty(),push() 代码已经过测试 #pragma once #in ...

随机推荐

  1. 递推DP URAL 1031 Railway Tickets

    题目传送门 /* 简单递推DP:读题烦!在区间内的都更新一遍,dp[]初始化INF 注意:s1与s2大小不一定,坑! 详细解释:http://blog.csdn.net/kk303/article/d ...

  2. adb logcat教程

    1.速查 $adb logcat -g //打印和缓冲区使用情况 $adb logcat -c main //清除main缓存区 $adb logcat -v threadtime -f /data/ ...

  3. port 22: Connection refused

    issue: os>ssh 196.168.27.90ssh: connect to host 196.168.27.90 port 22: Connection refused solutio ...

  4. 168 Excel Sheet Column Title Excel表列名称

    给定一个正整数,返回它在Excel表中相对应的列名称.示例:    1 -> A    2 -> B    3 -> C    ...    26 -> Z    27 -&g ...

  5. PHP连接数据操作步骤

    数据库的操作步骤: 端口号:0到65535 3306:mysql数据库的默认端口号(可修改) mysql_connect(“本机地址”,“用户名”,“密码”,); new_link:如果用同样的参数第 ...

  6. 通过HTML 取得页面、屏幕、浏览器的高度宽度

    一.介绍 1. 容器 一个页面的展示,从外到内的容器为:屏幕.浏览器以及页面本身. HTML元素展现在页面内,页面展现在浏览器内,而浏览器展现在屏幕内. 通过Js的一些对象可以获取这些容器的高度.宽度 ...

  7. 毕业设计:HomeFragment(一)

    一.主要思路 主要是通过ListView实现. 考虑到以后会添加长按修改功能,所以好几个地方都是用的FramLayout,而且CheckBox初始状态是被隐藏的.给ListView添加OnItemCl ...

  8. 【数据分析 R语言实战】学习笔记 第五章 数据的描述性分析(下)

    5.6 多组数据分析及R实现 5.6.1 多组数据的统计分析 > group=read.csv("C:/Program Files/RStudio/002582.csv") ...

  9. Summary of 2016 International Trusted Computing and Cloud Security Summit

    1)      Welcome Remarks 2)      The advancement of Cloud Computing and Tursted Computing national st ...

  10. 【HEVC帧间预测论文】P1.7 Content Based Hierarchical Fast Coding Unit Decision Algorithm

    Content Based Hierarchical Fast Coding Unit Decision Algorithm For HEVC <HEVC标准介绍.HEVC帧间预测论文笔记> ...