`
蒙面考拉
  • 浏览: 160248 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

顺序栈和链栈

 
阅读更多
顺序栈:话不多说直接上代码


#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
using namespace std;

const int maxsize=50;
//注意节点的内容即可
typedef struct {
	int data[maxsize];
	int top;
}stack;
//初始化
void initStack(stack* p){
	p->top=-1;
}
//判空
bool empty(stack* p){
	if(p->top>=0)
		return false;
	else
		return true;
}
//进栈
void push(stack *p,int num){
	if(p->top==maxsize-1){
		cout<<"栈满"<<endl;
		return;
	}
	else{
		p->top++;
		p->data[p->top]=num;
	}
}
//取栈顶元素
int top(stack* p){
	if(empty(p)){
		cout<<"stack is empty"<<endl;
		return NULL;
	}else{
		return p->data[p->top];
	}
}
//退栈
int pop(stack* p){
	if(empty(p)){
		cout<<"stack is empty"<<endl;
		return NULL;
	}
	else{
		p->top--;
		return(p->data[p->top+1]);
	}
}

int main(){
	stack* p=new stack;
	int a[5]={1,5,3,12,31};
	initStack(p);
	if(empty(p))
		cout<<"该栈是空栈"<<endl;
	for(int i=0;i<5;i++)
		push(p,a[i]);
	cout<<top(p)<<endl;
	cout<<pop(p)<<endl;
	system("pause");
	return 1;
}
 
 链栈:只能在链表头部进行操作,所以没有必要附加头结点,栈顶指针就是链表的头指针。其实也可以带头结点,
           可以按照需求来定义,话不多述,直接代码
typedef struct node{
	int data;
	struct node* next;
}linkstack;

void initStack(linkstack* p){
	p->next=NULL;
}

bool empty(linkstack* p){
	if(p->next==NULL)
		return true;
	else
		return false;
}

void push(linkstack* p,int num){
	linkstack *q=new linkstack;
	if(q==NULL)
		return;
	q->data=num;
	//栈使用的是头插法
	q->next=p->next;
	p->next=q;
}

int gettop(linkstack* p){
	if(p->next==NULL){
		cout<<"栈为空"<<endl;
		return NULL;
	}
	else{
		return p->next->data;
	}
}
int pop(linkstack* p){
	if(p->next==NULL){
		cout<<"栈为空"<<endl;
		return NULL;
	}
	linkstack* q;
	int data;
	q=p->next;
	data=p->next->data;
	p->next=q->next;
	free(q);//释放内存
	return data;
}
int main(){
	linkstack* p=new linkstack;
	int a[5]={1,12,22,31,2};
	initStack(p);
	if(empty(p))
		cout<<"该栈是空栈"<<endl;
	for(int i=0;i<5;i++)
		push(p,a[i]);
	cout<<"栈首元素是:"<<gettop(p)<<endl;
	while(!empty(p)){
		cout<<pop(p)<<"出栈"<<endl;
	}
	system("pause");
	return 1;
}
 
分享到:
评论

相关推荐

    C++模版类实现顺序栈、链栈

    本项目中,模版类被用来实现两种常见的数据结构——顺序栈和链栈,这两种栈都遵循后进先出(LIFO)的原则。下面我们将详细探讨这些知识点。 首先,**顺序栈**是基于数组实现的栈。在C++中,可以定义一个名为`...

    数据结构课程:顺序栈和链栈的实现

    ### 数据结构课程:顺序栈和链栈的实现 #### 栈的基本概念 栈是一种特殊的线性表,其特殊之处在于所有元素的插入和删除都只能在一端进行,这一端被称为栈顶(top),与之相对的一端称为栈底(bottom)。栈通常支持以下...

    顺序栈和链栈操作

    本主题主要探讨两种常见的栈实现:顺序栈和链栈。栈是一种特殊的线性数据结构,遵循“后进先出”(LIFO)的原则,即最后入栈的元素最先出栈。 首先,我们来详细了解一下顺序栈。顺序栈是用一维数组来实现的栈,其...

    会定义顺序栈和链栈的结点类型

    1、 会定义顺序栈和链栈的结点类型。 2、 掌握双向栈的结构特点及其在一维数组中的实现。 3、 掌握在双向栈中进行插入和删除元素的方法。 二、 实验要求 1、 定义栈的存储结构。 2、 编写程序实现双向栈的基本操作...

    C语言 栈的实现,包含顺序栈和链栈,亲测可用

    本文将详细讨论在C语言中如何实现栈,包括顺序栈和链栈,并基于提供的文件名来解析它们的实现。 1. **顺序栈**:顺序栈是通过数组来实现的,其优点在于存储空间连续,访问速度快。`stack_array.c`和`stack_array.h`...

    顺序栈、链栈将10进制转为2、8、16进制源码

    本话题聚焦于一种特定的应用——使用C++实现的顺序栈和链栈,将10进制数转换为2、8、16进制。这里我们将深入探讨顺序栈和链栈的概念,以及它们如何应用于不同进制之间的转换。 首先,顺序栈是一种基于数组的数据...

    顺序栈、链栈的插入和删除实验报告.pdf

    顺序栈和链栈的插入和删除实验报告 一、顺序栈和链栈的概念 顺序栈是一种线性数据结构,它使用数组来存储元素,每个元素按照顺序存储在数组中。链栈是一种链式数据结构,它使用链表来存储元素,每个元素都是一个...

    顺序栈与链栈的实现

    本文将详细介绍顺序栈和链栈的实现,包括它们的数据结构、操作和应用。 一、顺序栈 顺序栈是一种基于数组的栈实现,它使用一个数组来存储栈中的元素。顺序栈的优点是访问速度快、实现简单,但是它存在一个固定的...

    数据结构-栈的应用:顺序栈与链栈的应用

    在这个主题中,我们将专注于栈(Stack)这一特殊的数据结构,及其在实际应用中的两种主要实现方式:顺序栈(Sequential Stack)和链栈(Linked Stack)。栈通常被称为“后进先出”(LIFO,Last In First Out)的数据...

    C#实现顺序栈和链栈的代码实例

    自己定义的栈的接口,完全是按照栈的常用方法以及命名方式实现: 注意以下类,接口都是在一个命名空间下 ...顺序栈的实现,参照顺序表实现 namespace 栈 { class SeqStack&lt;T&gt; : IStackDS { pr

    链栈和顺序栈的实现

    本文将深入探讨两种常见的栈实现方式:链栈和顺序栈,并通过提供的源码文件来理解它们的实现细节。 1. **链栈**: 链栈是基于链表实现的栈,其元素存储在一系列分散的内存位置中,每个元素(节点)包含一个数据...

    顺序栈链栈1

    总结,顺序栈和链栈都是实现栈数据结构的有效方式,各有优缺点。顺序栈在空间管理上简单,但可能受限于预设的大小;链栈虽然需要额外的指针存储空间,但能灵活扩展,适应性强。在实际应用中,选择哪种实现方式取决于...

    会定义顺序栈和链栈的结点类型。

    1、 定义栈的存储结构。 2、 编写程序实现双向栈的基本操作:1)初始化;2)判断栈是否为空;3)判断栈是否已满;4)入栈;5)出栈;6)清空栈;7)取栈顶元素。 3、 所写源代码编程风格良好,有详细注释。 4、 程序...

    停车场管理系统(C语言顺序栈+链栈+链队列)

    停车场管理系统(C语言顺序栈+链栈+链队列)

    数据结构顺序栈链栈.pdf

    数据结构顺序栈链栈 根据提供的文件信息,我们可以总结出以下知识点: 1. 顺序栈的定义和实现: ...数据结构顺序栈链栈的实验报告需要涵盖栈的定义和实现、栈的应用、实验报告的要求、数据结构的应用等方面的知识点。

    数据结构C++ 顺序栈、链栈、循环队列、链队列的主要操作(Word文档含代码和注释)

    ### 数据结构C++:顺序栈、链栈、循环队列、链队列的主要操作 #### 一、概述 本文档提供了使用C++编程语言实现的数据结构中的栈与队列的操作详解,具体包括顺序栈、链栈、循环队列、链队列四种结构的基本操作,并...

    数据结构实验二——顺序栈,链栈,循环队列,链队列.docx

    在这个实验中,主要探讨了四种数据结构:顺序栈、链栈、循环队列和链队列,这些都是在编程实践中常用的抽象数据类型。 首先,我们来看顺序栈。顺序栈是一种线性数据结构,它的特点是元素按照特定的顺序存储在一块...

Global site tag (gtag.js) - Google Analytics