栈的顺序存储结构及应用(C、Java代码)

栈的定义:

栈(stack)是限定仅在表尾进行插入和删除的线性表。

我们把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom) ,不包含任何数据元素的栈称为空栈,栈又称为先进后出的线性表,简称LIFO结构。

栈的插入操作:叫做进栈,或压栈、入栈。

栈的删除操作:叫做,出栈,或者弹栈。

栈的结构定义

1 /*栈的结构定义*/
2 typedef int sElemType;  //sElemType类型定义为int
3 typedef struct {
4
5     sElemType data[MAXSIZE];
6     int top;   /*用于栈顶指针*/
7
8 }SqStack;

入栈操作

主要代码:

1 /*入栈操作,将元素e入栈*/
2 int PushStack(SqStack* s,sElemType e){
3     //判断入栈的合理性
4     if(s->top == MAXSIZE-1)
5         return 0;
6     s->top++;
7     s->data[s->top]=e;
8     return 1;
9 }

出栈操作

主要代码:

 1 /*出栈操作,并用e返回栈顶元素的值*/
 2 int PopStack(SqStack* s){
 3
 4     sElemType e;
 5     if((s->top)<0)   /*空栈*/
 6         return 0;
 7     e=s->data[s->top];
 8     s->top--;
 9     return e;
10 }

用栈之前确记要记得初始化一下

/*栈的初始化*/
void InitStack(SqStack* s){

    s->top =0;
}

实现代码

 1 #include <stdio.h>
 2
 3 #define MAXSIZE 20
 4 /*栈的结构定义*/
 5 typedef int sElemType;  //sElemType类型定义为int
 6
 7 typedef struct {
 8
 9     sElemType data[MAXSIZE];
10     int top;   /*用于栈顶指针*/
11
12 }SqStack;
13
14 /*栈的初始化*/
15 void InitStack(SqStack* s){
16
17     s->top =0;
18 }
19
20 /*入栈操作,将元素e入栈*/
21 int PushStack(SqStack* s,sElemType e){
22     //判断入栈的合理性
23     if(s->top == MAXSIZE-1)
24         return 0;
25     s->top++;
26     s->data[s->top]=e;
27     return 1;
28 }
29
30 /*出栈操作,并用e返回栈顶元素的值*/
31 int PopStack(SqStack* s){
32
33     sElemType e;
34     if((s->top)<0)   /*空栈*/
35         return 0;
36
37     e=s->data[s->top];
38     s->top--;
39     return e;
40 }
41
42 int main(){
43     SqStack stack;
44     InitStack(&stack);
45     PushStack(&stack,100);
46     int pop=PopStack(&stack);
47     printf("出栈数据:%d\n",pop);
48
49     return 0;
50 }

Java代码实现

 1 package stackdemo;
 2
 3 public class SqeStack {
 4
 5     int top; // 栈顶指针
 6     int data[] = new int[20];
 7
 8     /**
 9      * 栈的初始化
10      */
11     public void InitStack(SqeStack s) {
12         s.top = 0;
13     }
14
15     /**
16      * 进栈操作,n进栈数据
17      */
18     int PushStack(SqeStack s, int n) {
19
20         if (s.top == 19)
21             return 0;
22
23         s.top++;
24         s.data[s.top] = n;
25         return 1;
26     }
27
28     /**
29      * 出栈操作
30      */
31     int PopStack(SqeStack s) {
32         int e;
33
34         if (s.top == 0)
35             return 0;
36         e = s.data[s.top];
37         s.top--;
38         return e;
39     }
40
41 }

 1 package stackdemo;
 2
 3 public class TestStack {
 4
 5     public static void main(String[] args) {
 6         // TODO Auto-generated method stub
 7
 8         SqeStack s = new SqeStack();
 9         s.InitStack(s);
10         s.PushStack(s, 10);
11         int pop = s.PopStack(s);
12         System.out.println("出栈数据: " + pop);
13     }
14 }

完毕 - -

原文地址:https://www.cnblogs.com/liuzeyu12a/p/10303116.html

时间: 2024-10-16 20:28:19

栈的顺序存储结构及应用(C、Java代码)的相关文章

Java数据结构系列之——栈(1):栈的顺序存储结构及操作

package Stack; /** * 栈的定义:限定只在表末尾进行增加和删除操作的线性表 * 栈的特点:先进后出FILO(First In Last Out) * 通常我们把允许插入和删除的一段称为栈顶(top),另一端 * 称为栈底,不包含任何元素的栈称为空栈 * 栈的出栈操作我们一般称为进栈或者压栈或者入栈 * 栈的删除操作我们一般称为出栈或者弹栈 * * 这里我们用数组来实现栈的顺序存储结构及各种操作 * @author wl * */ public class MyStack { p

数据结构(六)栈的顺序存储结构

一.栈的定义 1.栈(stack)是限定仅在表尾进行插入和删除操作的线性表. 2.把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不含任何元素的栈称为空栈.栈又称为后进先出(Last In First Out)的线性表,简称LIFO结构. 3.栈的插入操作,叫做进栈(push),也称压栈.入栈:栈的删除操作,叫做出栈(pop),也称弹栈. 4.栈的顺序存储结构:既然栈是线性表的特例,那么栈的顺序存储其实也是线性表顺序存储的简化.数组下标为0的一端作为栈底,定义一个top

一步一步学习数据结构(三)栈的顺序存储结构实现代码

//栈这种逻辑结构的实现与一般线性表的实现类似,有两种存储方式:顺序存储和链式存储 //先学习顺序存储 //1. #include<stdio.h> #include<stdlib.h> #define null NULL #define SIZE 100 typedef int dataType ; typedef struct { dataType data[SIZE]; int top; }cStack,*cStackPointer; //初始化栈空间 void initSt

栈的顺序存储结构及及其实现

由于栈是线性结构的一种,所以,栈也可以通过顺序存储结构实现. 因为,线性表的顺序存储结构是通过数组实现的,所以,栈的顺序存储结构也通过数组实现.不可避免的,要设置栈的最大存储空间.因为,栈只允许在栈顶进行元素的插入与删除操作,所以需要一个指向栈顶的变量top.那么栈的存储结构: typedef int SElemType; typedef struct{     SElemType data[MAXSIZE];     int top; }SqStack; 接着,就是插入一个新的元素e,也就是进

数据结构:栈的顺序存储结构及实现

栈的定义和抽象数据类型 栈是限定仅在表尾进行插入和删除操作的线性表.所以说栈也是线性表,栈元素具有线性关系,即前驱后继关系. 其抽象数据类型: ADT 栈(Stack) Data 同线性表,元素具有相同的类型,相邻元素具有前驱和后继关系. Operation InitStack(*S): 初始化操作,建立一个空栈S. DestroyStack(*S): 若栈存在,则销毁它. ClearStack(*S): 将栈清空. StackEmpty(S): 若栈为空,返回true,否则返回false. G

3.1 栈的顺序存储结构

<?php header("content-type:text/html;charset=utf-8"); /** * 栈的顺序存储结构的基本操作 * *包括 * 1.顺序栈的初始化 __contruct() * 2.销毁栈 destroyStack() * 3.清空栈 clearStack() * 4.判断栈是否为空 stackEmpty() * 5.获取栈顶元素 getTop() * 6.进栈操作 push() * 7.出栈操作 pop() * 8.遍历栈元素 travers

栈(顺序存储结构)

堆栈:具有一定操作约束的线性表,只能在一端作插入.删除 具有后入先出的特性(Last In First Out) 分顺序存储结构.链式存储结构两种形式 堆栈的顺序存储结构 通常由一个一维数组和一个栈顶元素变量组成 图解如下: 形式一:构建结构体 0.结构初始化 #define MaxSize ### struct StackNode { ElementType Data[MaxSize]; int top; }; 1.建立空栈 struct StackNode* createStack() {

大话数据结构之栈的顺序存储结构

#include<iostream> //#include<time.h> //#include <stdlib.h> using namespace std; #define OK 1 #define TRUE 1 #define FALSE 0 #define ERROR 0 #define MAXSIZE 100//数组的最大大小 typedef int status;//返回的状态值 typedef int elemtype;//节点里数据的类型 typedef

栈的顺序存储结构及实现

还没优化,也就是栈满动态申请内存 #include<cstdio> #include<cstdlib> #include<cstring> #define MAXSIZE 100 typedef struct{ int data[MAXSIZE]; int top; }SqStack; int Push(SqStack *S,int e){ //压栈操作 if(S->top == MAXSIZE - 1) return 0; S->top++; S->