链栈的实现问题

问题描述:用链式存储实现栈的基本操作

涉及变量:top:自定义Node类,指向栈顶元素的结点

涉及教材:《数据结构——Java语言描述(第2版)》 清华大学出版社

大致思路:

链式存储结构一般是通过链接结点类来形成链

出栈是由栈顶元素向栈底元素方法依次输出

则top的位置需指向栈顶元素

判空的根据是top结点是否为空,即栈顶元素是否存在

置空只需要将top指针指向null,则可以重新开始入栈操作

求长度需要遍历了全部结点后才能计算准确长度

陈列元素也需要遍历各元素,与求长度的算法有点类似,只是在遍历过程中将每个元素输出

链式栈不需要先申请空间,因此也没有必要在入栈时判满

此处有抛出异常是由于实现了IStack的接口,顺序栈需要判满,满则抛出异常

若没有实现该接口是可以不抛出异常的

出栈操作,判空即可,若非空栈则返回栈顶元素,但需将top后移至栈顶元素的下一元素

因此需要用中间变量来返回原栈顶元素的data

取栈顶元素,与出栈相同,需判满,但直接返回栈顶元素即可

以上是我对链栈的基本操作实现的一些看法,希望对各位有所帮助

190120 Rewivy

原文地址:https://www.cnblogs.com/rewivy/p/10295031.html

时间: 2024-08-03 23:54:05

链栈的实现问题的相关文章

链栈的实现

链栈即链式栈,也就是说我们不用再考虑空间的大小,可随心所欲的进行数据的插入/删除了.和顺序栈一样,仍然要保持其stack的特性,只在一端进行插入和删除,后进先出. 示例代码: #ifndef _LINKSTACK_H #define _LINKSTACK_H typedef int ElemType; typedef int Status; typedef struct linkStack { ElemType data; struct linkStack * top; }linkStack;

堆栈(链栈)

#include<cstdlib> #include<iostream> #include<fstream> using namespace std; #define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef int Status; typedef char SElemType; typedef struct StackNode{ SElemType data; struct StackNode *next; }S

链栈和链队列的类实现

#include<iostream>#include<cassert> using namespace std; template <class T>//链栈 struct LinkNode{T data;LinkNode<T> *Link;LinkNode(LinkNode<T> *pr=NULL){Link=pr;}LinkNode(const T& item,LinkNode<T> *pr=NULL){data=item

数据结构(java语言描述)链栈的定义

1.定义栈接口 package stack;public interface Istack {    public void clear();    public boolean isEmpty();    public int length();    public Object peek();    public void push(Object x) throws Exception;    public Object pop();} 2.定义Node结点 package stack; i

链栈-书上习题

元素的入栈出栈 链栈: 1 #include <iostream> 2 #include <cstdio> 3 using namespace std; 4 struct stack 5 { 6 char data; 7 stack *next; 8 }; 9 stack* initstack() /*为栈头指针申请内存*/ 10 { 11 stack *s=new stack; 12 s->next=NULL; 13 return s; 14 } 15 int isempt

java实现链栈

前面学习了java实现顺序栈:http://www.cnblogs.com/lixiaolun/p/4644134.html 接下来,学习java实现链栈. 链栈类代码: package linkedstack; public class LinkStack { private Element base; private Element top; class Element { public Object data; public Element next; } /** * 初始化栈 * */

数据结构(C实现)------- 链栈

描述:      链栈,即栈的链式存储结构,链栈通常使用不带头结点的单链表来表示,因此其结点的结构和单链表的结点结构相同. 在一个链栈中,栈底就是链表的最后一个结点,而栈顶总是链表的第一个结点.因此,新入栈的元素即为链表中采用头插法新加入的结点,一个链栈可以由栈顶指针唯一确定,当top为NULL时,则表示该栈是一个空的链栈.  实现:   链栈结点的类型描述: typedef int ElemType; typedef struct node{ ElemType data; struct nod

栈的Java实现--链栈

栈的Java实现--链栈 链栈,顾名思义,就是以链表的形式实现的栈的相关操作,其实是功能弱化了的链表,如果已经阅读过链表的实现代码,那么链栈的实现显得更为容易. 链栈的基本结构: 链栈的入栈操作: 让top引用指向新的节点,新节点的next指向原来的top 记录栈内元素个数的size+1 链栈的出栈操作: top引用指向原栈顶元素的下一个元素(top.next),并释放原栈顶元素的引用 记录栈内元素个数的size-1 链栈的Java实现代码: package com.liuhao.DataStr

【小白成长撸】--链栈(C语言版)

1 // 链栈.cpp : 定义控制台应用程序的入口点. 2 // 3 4 #include "stdafx.h" 5 #include <stdio.h> 6 #include <stdlib.h>//malloc的头文件 7 8 typedef struct line_stack//栈包装 9 { 10 int x; 11 struct line_stack *next; 12 }link; 13 14 void pushes(link **top, int

数据结构(二):栈与链栈

#include <cstdio> #include <windows.h> #define MAXSIZE 100 struct Node { int data[MAXSIZE]; int top; }; typedef struct Node MyStack; //初始化 void MyStackInit(MyStack S) { S.top = -1; } //判空 BOOL MyStackEmpty(MyStack S) { if (S.top == -1) return