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

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>

#define MAXSIZE	15

int main()
{
	int a[MAXSIZE];
	int bottom, top;
	int x;

	bottom = top = -1;
	printf("Please input x(0<=x<=32767):");
	scanf("%d", &x);
	while(x)
	{
		a[++top] = x%2;
		x /= 2;
	}
	while(-1 != top)
	{
		printf("%d ", a[top--]);
	}
	printf("\n");

	return 0;
}

4.判断一个C语言表达式的左右括号是否匹配,提示:将要判断的表达式用字符串输入。

#include <stdio.h>

#define MAXSIZE	100

int main()
{
	char a[MAXSIZE];
	int top = -1;
	int i;

	printf("Please input a expression:");
	gets(a);
	i = 0;
	while(a[i])
	{
		if('(' == a[i])
			top ++;
		else if(')' == a[i])
		{
			if(-1 == top)
				break;
			else
				top --;
		}
		i ++;
	}

	if('\0' == a[i] && -1 == top)
		printf("Match.\n");
	else
		printf("Not match.\n");
	return 0;
}

5.栈的基本操作——出栈和入栈

#include <stdio.h>
#include <malloc.h>

typedef struct st
{
	int maxsize;
	int top;
	int *pstack;
}stack;

void create_stack(stack *s, int ms);
void push(stack *s, int x);
int pop(stack *s);
void clear_stack(stack *s);

int main()
{
	stack s;
	int ms, i;
	int a[] = {13, 17, 15, 25};

	printf("Please input stack size:");
	scanf("%d", &ms);
	create_stack(&s, ms);
	for(i = 0; i < 4; i++)
		push(&s, a[i]);
	while(s.top != -1)
		printf("%d ", pop(&s));
	printf("\n");
	clear_stack(&s);

	return 0;
}

void create_stack(stack *s, int ms)
{
	s->maxsize = ms;
	s->top = -1;
	s->pstack = (int *)malloc(ms*sizeof(int));
}

void push(stack *s, int x)
{
	if(s->top < s->maxsize-1)
		s->pstack[++s->top] = x;
}

int pop(stack *s)
{
	if(s->top != -1)
		return s->pstack[s->top--];
}

void clear_stack(stack *s)
{
	s->maxsize = 0;
	s->top = -1;
	free(s->pstack);
	s->pstack = 0;
}

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

时间: 2024-08-01 15:20:17

栈(一)——栈的基本操作的相关文章

Uva - 1513 Moive collection ( 模拟栈 + 树状数组基本操作 )

Uva - 1513 Moive collection ( 模拟栈 + 树状数组基本操作 ) 题意: 一个书架,原来所有的书都是按顺序摆好的,书的编号从1开始到n 操作: 取出一本书,统计在这本书之前有多少本书,统计完之后,将这本书放在书架的第一位. 如:  1 2 3 4 5取4   4 1 2 3 5 (取之前,有3本书在4前面,取完后,将4放在栈顶)取4   4 1 2 3 5 (取之前,有0本书在4前面,取完后,将4放在栈顶)取2   2 4 1 3 5 (取之前,有2本书在2前面,取完

顺序栈的栈基本操作(C语言版)

由于现在只学了C语言所以就写这个C语言版的栈的基本操作 这里说一下 :网上和书上都有这种写法 int InitStack(SqStack &p) &p是取地址  但是这种用法好像C并不支持 ,C++才支持,所以用 C语言写就需要使用指针 代码如下: 1 #include <stdio.h> 2 #include <stdlib.h> 3 #define STACK_INIT_SIZE 100//储存空间初始分配量 4 #define STACKINCREMENT 1

栈及栈的C++实现

栈:栈是一种数据结构,栈里元素的添加和删除只能在栈的末端进行.它是一种“后进先出”(LIFO)的数据结构. 栈的操作: initializeStack:初始化栈,使得为一个空栈. destroyStack:清空栈里所有的元素,使得为一个空栈. isEmptyStack:判断栈是否为空,如果为空,返回true,否则返回false. isFullStack  : 判断栈是否溢出,如果溢出,返回true,否则返回false. push : 添加一个新的元素到栈顶.前提是栈存在,且栈没有溢出. top

数据结构初探(一)栈与栈的应用

(一)在描述栈(stack)之前,我们先了解一下数据结构基础概念: 1.数据(data)是对客观事物的符号表示,数据元素(data element)是数据的基本单位,一个数据元素可由若干个数据项(data item)组成,数据项为数据的不可分割的最小单位,数据对象(data object)是性质相同的数据元素的集合,是数据的一个子集.数据结构(data structure)是相互之间存在一种或多种特定关系的数据元素的集合.数据元素相互之间的关系称为结构(structure). 2.根据数据元素之

c++实验4 栈及栈的应用+回文+中、后缀表达式

栈及栈的应用+回文+中.后缀表达式 1.栈顺序存储结构的基本操作算法实现 (1)栈顺序存储结构的类定义: class SeqStack { private: int maxsize; DataType *data; //顺序堆栈数组 int top; //栈顶位置指示器 public: SeqStack(int size); //构造函数 ~SeqStack(void) {} //析构函数 void Push(const DataType item); //入栈 DataType Pop(voi

C++中栈的出栈,入栈规则:A,B,C,D,E

考题: 栈底至栈顶一次存放元素 ABCD 在第五个元素E入栈之前  栈中元素可以出栈,则出栈序列可能是_____a d___________. a.  ABCED b.  DBCEA   c.  CDABE   d.  DCBEA 分析: 1.假定进栈序列是从小到大排练的(即A<B<C<D<E),则出栈序列中不可能有  “大小中”这种序列,因为在“大数”出栈后,在栈中“中数”是在“小数”上面的,所以只能是先出“中数”再出“小数”2.出栈序列中如包含下列序列则是错误的:CAB,DAB

栈1--出栈序列

栈1--出栈序列 一.心得 二.题目及分析 进栈序列是123,求所有的出栈序列 用回溯法做 三.代码及结果 1 #include <iostream> 2 #include <stack> 3 using namespace std; 4 5 stack<int> sta; 6 int ans[4]; 7 int total=0; 8 9 void print(){ 10 total++; 11 cout<<total<<": &quo

压栈出栈遍历栈实例代码

#include<stdio.h> #include<stdlib.h> #include<malloc.h> typedef struct Node//定义一个链表结构体 { int data; struct Node* pNext; }NODE,*PNODE; typedef struct Stack//定义一个栈结构体 { PNODE pTop; PNODE pBottom; }STACK,*PSTACK; void initStack(PSTACK); void

栈及栈的链式存储结构(栈链)

栈:线性结构,后进先出.栈(Stack)是一种特殊的线性表(顺序表,链表)只在表尾进行删除和插入操作. 注意:对于栈来说,表尾称为栈的栈顶(top),表头称为栈底(bottom). 栈也是线性结构的一种特例.与队列不同,他只有一个口,只能从这里读或者写数据,这个口称为栈顶(top).栈是一种先进后出的数据结构.先进来的元素会放入栈底,而后进来的元素被放在它的上面,最后进来的元素的上面的位置,称为栈顶. 栈所提供的操作比一般的线性表要少很多,只提供:初始化.销毁.判断是否为空.求栈的长度.清空栈.

顺序栈——双栈(Dual Stack)

顺序栈--双栈(Dual Stack) 1. 双栈的概念 1.1 双栈的定义 双栈是指两个顺序栈,是一种特殊的顺序栈. 1.2 双栈中各元素的逻辑及存储关系 双栈共享一个地址连续的存储单元.即程序同时需要两个栈时,可以定义一个足够的栈空间,该空间的两端分别设为两个栈的栈底,用bottom[0]=-1和bottom[1]=maxSize指示. 压入数据时,让两个栈的栈顶top[0]和top[1]都向中间伸展,如果指示栈顶的指针top[0]+1等于另一个栈顶的指针top[1]时两栈已满. 每次进栈时