栈的基本操作 栈和堆

#include<stdio.h>
#include<stdlib.h>
#define LENGTH 100	//堆的初始分配的长度
#define ADD_LEN 10	//堆栈增量
typedef struct
{//构造栈的数据类型
	int *base;
	int *top;
	int stacksize;
}SqStack;
void CreateStack(SqStack &S);//初始化一个栈
void PushStack(SqStack &S,int e);//e进栈
void PopStack(SqStack &S);//栈顶元素出栈
void DestroyStack(SqStack &S);//销毁栈
void PrintfStack(SqStack &S);//输出当前的栈
void main()
{	SqStack Sa;
	int m,n;
	CreateStack(Sa);
	printf("Please input the total of inserting number:");
	scanf("%d",&m);
	while(m>LENGTH)
	{	printf("The number you input can't be larger than %d。please input again:\n",LENGTH);
		scanf("%d",&m);
	}
	while(m--)
	{	printf("Please input a number to insert:");
		scanf("%d",&n);
		PushStack(Sa,n);
	}
	PrintfStack(Sa);
	PopStack(Sa);
	PrintfStack(Sa);
	DestroyStack(Sa);
}
void CreateStack(SqStack &S)
{	S.base=(int *)malloc(LENGTH*sizeof(int));
	if(!S.base)
	{	printf("Fail to create stack!\n");
		return;
	}
	S.top=S.base;
	S.stacksize=LENGTH;
	printf("Success to create stack!\n");
}
void PushStack(SqStack &S,int e)
{	if(S.top-S.base>=S.stacksize)//考虑栈是否已满,如满,则从新分配空间
	{	S.base=(int *)realloc(S.base,(S.stacksize+ADD_LEN)*sizeof(int));
		if(!S.base)
			return;
		S.top=S.base+S.stacksize;
		S.stacksize+=ADD_LEN;
	}
	*S.top++=e;
	printf("%d success to insert the stack!\n",e);
}
void PopStack(SqStack &S)
{	int m;
	if(S.top==S.base)
	{	printf("The stack is empty!\n");
		return;
	}
	m=*--S.top;
	printf("%d is out of the stack!\n",m);
}
void DestroyStack(SqStack &S)
{	free(S.base);//释放空间
	S.base=NULL;
	*S.top=-1;//将其它成员设置成安全值
	S.stacksize=0;
	printf("Success to destroy the stack!\n");
}
void PrintfStack(SqStack &S)
{	int *p;
	p=S.top;
	printf("The stack is :");
	while(--p>=S.base)
		printf("%d",*p);
	printf("\n");
}
时间: 2024-10-29 19:10:56

栈的基本操作 栈和堆的相关文章

3_顺序栈的基本操作

/****date:2014.12.08*****/ /***顺序栈的基本操作***/ /*** Last in First out ( LIFO ) ***/ 顺序栈:使用地址连续的内存单元依次保存栈中的数据,可以定义一个指定大小的结构数组来作为栈:栈底元素序号为0,栈顶元素序号为Top: 栈内元素遵循"后进先出"(LIFO)原则:只能在栈的一端进行操作,即在栈顶位置对栈内元素进行操作. 刚明白的道理:getchar() 对于 键盘的所有操作都算在内,敲击  回车键  也算一个输入信

【数据结构】用C++编写栈及基本操作(包括入栈,出栈,获得栈顶,摧毁,清空等等)

//[数据结构]用C++编写栈及基本操作(包括入栈,出栈,获得栈顶,摧毁,清空等等) //头文件 #ifndef _SEQ_STACK_ #define _SEQ_STACK_ #include <iostream> using namespace std; template <class Type> class SeqStack { public: SeqStack(size_t sz=INIT_SIZE) { capacity = sz > INIT_SIZE ? sz

链栈的基本操作

链栈的基本操作实现代码如下: #include<iostream> using namespace std; #define TRUE 1 #define FALSE 0 //链栈的结构 typedef struct node { int data; struct node *next; }LinkStackNode; typedef LinkStackNode *LinkStack; //链栈进栈 int Push(LinkStack top, int x)//将数据元素x压入栈top中 {

栈的基本操作( too simple)

栈的基本操作: 1,存储结构: 2,创建空战: 3,获取栈顶元素:(判空) 4,插入和删除: 5,销毁栈: # define stack_init_size 100 # define stackincrement 10 typedef int SElemType; typedef struct { SElemType *base; SElemType *top; int stacksize; }SqStack; void DestoryStack(SqStack &S) { S.top=S.ba

栈的基本操作—出栈与入栈

#include<stdio.h> #include<stdlib.h> #define LENGTH 100 //初始分配栈的长度 #define ADD_LEN 10 //栈长增量 typedef struct {//构造栈的数据类型 int *base; int *top; int stacksize; }SqStack; void CreateStack(SqStack &S);//初始化一个栈 void PushStack(SqStack &S,int e

栈(一)——栈的基本操作

1.栈的简介 栈是一种后入先出的数据结构,一般包含两种最基本的操作:入栈(push)和出栈(pop). 入栈操作:top指针上移,元素入栈. 出栈操作:top指针下移. 栈空的条件:top == bottom 栈满的条件:top == maxsize-1 2.有数据序列1 2 3一次存入一个栈stack中,则出栈顺序可以为以下四种: 1,2,3: 2,1,3: 3,2,1: 1,3,2. 3.任意输入一个十进制整数x(x<32768),输出x的二进制值. #include <stdio.h&g

SDUT-3335_数据结构实验之栈与队列八:栈的基本操作

数据结构实验之栈与队列八:栈的基本操作 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 堆栈是一种基本的数据结构.堆栈具有两种基本操作方式,push 和 pop.push一个值会将其压入栈顶,而 pop 则会将栈顶的值弹出.现在我们就来验证一下堆栈的使用. Input 首先输入整数t(1 <= t <= 10),代表测试的组数,以后是 t 组输入. 对于每组测试数据,第一行输入两个正整数 m(1 <= m &

JVM 运行时数据区:程序计数器、Java 虚拟机栈和本地方法栈,方法区和堆

Java 虚拟机可以看作一台抽象的计算机,如同真实的计算机,它也有自己的指令集和运行时内存区域. Java 虚拟机在执行 Java 程序的过程中会把它所管理的内存(运行时内存区域)划分为若干个不同的数据区域. 如下图所示: 一.程序计数器 Program Counter Register 定义:程序计数器是当前线程所执行字节码的行号指示器. 原因:Java 中的多线程是线程间轮流切换并需要 CPU 给予时间片的方式实现的.在任何一个确定的时刻,都只有一个线程在执行指令.为了线程间轮流切换后能够快

栈的基本操作

这个栈是带有表头的栈.实现栈的一些规范操作,初始化,插入,删除等.包括两个头文件Stack.h,fatal.h,库函数Stack.c,测试函数TestStack.c.头文件放的都是函数声明,库函数Stack.c放的的函数的定义. Stack.h typedef int ElementType; #ifndef _Stack_H #include<stdbool.h> struct Node; typedef struct Node *PtrToNode; typedef PtrToNode S