限定线性表---栈


一,栈的定义
二,顺序栈
三,链栈

一,栈的定义

栈是一种线性表,插入删除的操作都在一段进行,这端一般为栈顶
栈是先进后出的线性表,简称LIFO表
数据元素:任意类型但是必须属于一个数据对象
栈中数据元素为线性关系
栈分为两种存储结构:顺序存储和链式存储

二,顺序栈

顺序栈必须在栈顶附设一个位置指针top来动态指示栈顶元素在栈中的位置
通常 top=-1 表示空栈
GetTop的意思是取栈顶元素,但是他的指针位置不变,就是说,我只是把这个元素赋到了另外一个变量或者空间里,但是栈顶的这个元素并没有弹出

在这里插入图片描述
栈的初始化

Status Initstack(SqStack &s){
 s.top = -1;    //栈的初始化,如果栈顶指针 top 等于-1 则栈为空栈
 s.stacksize = MAXSIZE;  //stacksize置为栈的最大容量MAXSIZE 
 return OK;
}

入栈

public void push(T obj){
 if(top==stackArray.length-1){
  T[] p=(T[]) new Object[top*2+2];
  for(int i=0;i<=top;i++){
   p[i]=stackArray[i];
  }
  stackArray=p;
 }
 top++;
 stackArray[top]=obj;
}

出栈

pub
lic T pop(){
	if(top==-1){
		System.out.println("数据栈已空,无法删除元素");
		return null;
	}
	top--;
	return stackArray[top+1];
}

取出栈顶元素

public T getHead(){
	if(top==-1){
		System.out.println("数据栈已空,无法删除元素");
		return null;
	}
	return stackArray[top];
}

三,链栈

链栈是指采用链接存储的结构实现的栈。事实上链栈和链表的样子很像

在这里插入图片描述

入栈

在栈顶插入值为x的元素存放在一个新创建的LinkStack的data中。原本的LS与新创建的LinkStack的next相等。然后LS与原来的首元素断开,与x连接。如图:

在这里插入图片描述

LinkStack *Push(LinkStack *LS,datatype x)
{
    LinkStack *p;
    p=(LinkStack *)malloc(sizeof(LinkStack))
    p->data=x;
    p->next=LS;
    LS=p;
    return LS;
}

出栈

首先将创建一个新的LinkStack *pop,不需要分配内存空间。直接将pop指向出栈data,LS指向pop的next空间。然后断开LS原本指向pop中data。
在这里插入图片描述

LinkStack *POP(LinkStack *LS)
{
    LinkStack *poptem;
    poptem=LS;
    LS=poptem->next;
    free(poptem);
    return LS;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值