栈的c语言实现

#include<iostream>
using namespace std;

#define STACK_INIT_SIZE 10
#define STACKINCREMENT 10
#define ElemType int

typedef struct
{
	ElemType *base;
	int top;
	size_t capacity;
}SqStack;

bool IsFull(SqStack *st)
{
	return st->top >= st->capacity;
}
bool IsEmpty(SqStack *st)
{
	return st->top == 0;
}
bool InitStack(SqStack *st)
{
	st->base = (ElemType*)malloc(STACK_INIT_SIZE * sizeof(ElemType));
	st->top = 0;
	st->capacity = STACK_INIT_SIZE;
	return true;
}
ElemType GetTop(SqStack *st)
{
	if(!IsEmpty(st))
	{
		return st->top;
	}
	cout<<"stack empty!"<<endl;
	return -1;
}
void Push(SqStack *st, ElemType item)
{
	if(!IsFull(st))
	{
		st->base[st->top++] = item;
	}
	else
	{
		cout<<"stack full!"<<endl;
	}
}
void Show(SqStack *st)
{
	for(int i=st->top-1; i>=0; --i)
	{
		cout<<st->base[i]<<" ";
	}
	cout<<endl;
}
ElemType Pop(SqStack *st)
{
	if(!IsEmpty(st))
	{
		st->top--;
		return st->base[st->top];
	}
	return -1;
}

int main()
{
	SqStack st;
	InitStack(&st);
	int i = 0;
	for(; i<5; ++i)
		Push(&st,i);
	Pop(&st);
	Show(&st);
	return 1;
}

时间: 2024-10-25 19:00:07

栈的c语言实现的相关文章

链栈的c语言实现

1.链栈结构 typedef struct StackNode { SElemType data; struct StackNode *next; }StackNode,*LinkStackPtr; typedef struct { LinkStackPtr top; int count; }LinkStack; 2.构造一个空栈S Status InitStack(LinkStack *S) { S->top = (LinkStackPtr)malloc(sizeof(StackNode));

如何自学Struts2之Struts2值栈和OGNL语言[视频]

如何自学Struts2之Struts2值栈和OGNL语言[视频] 之前写了一篇"打算做一个视频教程探讨如何自学计算机相关的技术",优酷上传不了,只好传到百度云上: http://pan.baidu.com/s/1kTDsa95

顺序栈的c语言实现

Football on Table 题意:一些杆上有人,人有一个宽度,然后现在有一个球射过去,要求出球不会碰到任何人的概率 思路:计算出每根杆的概率,之后累乘,计算杆的概率的时候,可以先把每块人的区间长度再移动过程中会覆盖多少长度累加出来,然后(1?总和/可移动距离)就是不会碰到的概率 代码: #include <stdio.h> #include <string.h> #include <math.h> const double eps = 1e-8; int t,

栈的C语言源码

1.导言(为什么要用栈?) 通常来说,决定采用何种方式来存储数据是非常重要的,这样便于对数据检索时,数据会自动按照某种规定的顺序给出.栈和队列是检索数据的一种常用的数据结构.栈和队列是两种非常重要的数据结构,从数据结构来看,栈和队列也是线性表.是操作受限的线性表,栈只能在一端(栈顶)进行插入和删除,队列只能在一端(队尾)进行插入在另一端(队头)进行删除.但是从数据类型来说,栈和队列是和线性表不大相同两类重要的抽象数据类型.这里,首先重点介绍栈,以及栈的先关操作的c语言实现.栈是按照后进先出(LI

顺序栈的栈基本操作(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语言实现

从数据结构的角度看,栈和队列也是线性表,其特殊性在于栈和队列的基本操作是线性表操作的子集,它们是操作受限的线性表: 但从数据类型角度来看,它们是和线性表大不相同的两种重要的抽象数据类型. 顺序栈,即栈的顺序存储结构是用一组地址连续的存储单元依次存放自栈顶到栈顶的数据元素 typedef struct { int * base; //栈底指针,在栈构造之前和摧毁之后,base的值为NULL int * top; //栈顶指针,在非空栈始终指向栈顶元素的下一个位置 int stacksize; //

简单栈的c语言实现

#include<stdio.h> #include<stdlib.h> #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 typedef struct{ char name[10]; int score; }student; typedef struct { student *base; student *top; int stacksize; }SqStack; SqStack InintStack(SqStack &a

七、栈实现c语言符号的匹配

1.LinkList.h #ifndef _LINKLIST_H_ #define _LINKLIST_H_ typedef void LinkList; typedef struct _tag_LinkListNode LinkListNode; struct _tag_LinkListNode { LinkListNode* next; }; LinkList* LinkList_Create(); void LinkList_Destroy(LinkList* list); void Li

顺序栈(C语言版)

//SeqStack.h </pre><pre name="code" class="cpp">/* stack:Last In First Out */ //1.定义顺序栈的结构 typedef struct stack { DATA data[SIZE+1]; int top; //栈顶 }SeqStack; //2.初始化栈 SeqStack *SeqStackInit() { SeqStack *p; if(p=(SeqStack *

栈的C语言实现(链表和数组)

数组栈的实现 stack_array.h #ifndef _stack_array_h #define EmptyTOS (-1) #define MinStackSize (5) #define TRUE 1 #define FALSE 0 typedef int ElementType; typedef struct StackArrayNode { int Capacity; int TopOfStack; ElementType *Array; }StackArrayNode,*Stac