C语言顺序栈完整实现

#include <stdio.h>
#include <stdlib.h>
const int MAXSIZE = 100;//注意
#define ElementType int

typedef struct SNode *Stack;
struct SNode{
	ElementType Data[MAXSIZE];
	int Last;
};
Stack CreateStack(int MAXSIZE);
int IsFull(Stack S);
void Push(Stack S,ElementType item);
int IsEmpty(Stack S);
ElementType Pop(Stack S);

int main(){
	Stack S = CreateStack(MAXSIZE);
	for(int i=0;i<11;i++)
		Push(S,i);
	while(!IsEmpty(S)){
		printf("%d\n",Pop(S));
	}
	return 0;
}
Stack CreateStack(int MAXSIZE){
	Stack S = (Stack)malloc(sizeof(SNode));
	S->Last = -1;
	return S;
}
int IsFull(Stack S){
	return S->Last+1 ==MAXSIZE;
}
int IsEmpty(Stack S){
	return S->Last < 0;
}
void Push(Stack S, ElementType item){
	if(IsFull(S)){
		printf("栈满\n");
		return;
	}else{
		S->Data[++S->Last]= item;
		return;
	}
}
ElementType Pop(Stack S){
	if(IsEmpty(S)){
		printf("栈为空\n");
		return NULL;
	}else{
		return S->Data[S->Last--];
	}
}

  

时间: 2024-12-28 18:06:56

C语言顺序栈完整实现的相关文章

数据结构C语言—顺序栈案例—十进制转二进制

1 #include <stdio.h> 2 #include <stdlib.h> 3 #include "SeqStack.h" 4 5 void conversion(int); 6 SeqStack seq; 7 int main() 8 { 9 int n; 10 scanf("%d",&n); 11 conversion(n); 12 return 0; 13 } 14 15 void conversion(int N)

C语言顺序表完整实现

#include <stdio.h> #include <stdlib.h> #define ElementType int #define MAXSIZE 100 typedef struct{ ElementType Data[MAXSIZE]; int Last; }List;//list在前面和后面效果是一样的 List *MakeEmpty(); ElementType FindKth(int K, List *PtrL); int Find(ElementType X,

C语言 顺序栈

1 #include <stdbool.h> 2 #include "stdio.h" 3 #define MAXSIZE 20 4 #define OK 1 5 #define ERROR 0 6 7 struct sqStack{ 8 int data[MAXSIZE]; 9 int top; 10 }; 11 12 /*初始化操作,建立一个空栈*/ 13 int initStack(struct sqStack *s){ 14 s->top=-1; 15 ret

C语言顺序栈

10进制转任何进制 #include<stdio.h> #include<stdlib.h>#define maxSize 30typedef int DataType;typedef struct{ DataType data[maxSize]; int top;}Seqstack;int push(Seqstack &s,DataType x){ if(s.top==maxSize-1) return 0; s.data[++s.top]=x; return 1;}in

顺序栈的c语言实现

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

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

数据结构-顺序栈的实现 1 顺序栈的定义 既然栈是线性表的特例,那么栈的顺序存储其实也是线性表顺序存储的简化,我们简称为顺序栈.线性表是用数组来实现的,对于栈这种只能一头插入删除的线性表来说,用数组哪一端来作为栈顶和栈底比较好? 对,没错,下标为0的一端作为栈底比较好,因为首元素都存在栈底,变化最小,所以让它作栈底. 我们定义一个top变量来指示栈顶元素在数组中的位置,这top就如同中学物理学过的游标卡尺的游标,它可以来回移动,意味着栈顶的top可以变大变小,但无论如何游标不能超出尺的长度.同理

顺序栈用C语言实现

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

数据结构(java语言描述)顺序栈的使用(两个大数相加)

利用http://www.cnblogs.com/xleer/p/5289661.html中对顺序栈以及栈的进本方法的定义,实现超过整数上限的两个数的加法计算. 算法: package stack;/********************************************************************** * @author sch ********利用栈,计算两个大数的和.大数的值超过int存储的范围******************************