栈的结构及其操作

/**
 *	 作者: LinX  2017-6-15 
 *	 
 *	 内容: 顺序栈的结构以及基本操作 
 *		 
 */ 
 
 #include <stdio.h>
 #include <stdlib.h>
 
 #define MAXSIZE 100
 
 typedef int ElemType;
 
 typedef struct SqStack
 {
 	ElemType data[MAXSIZE];
 	int top;
 }SqStack;
 
 /*栈的基本操作*/
 
 SqStack* InitStack();					//初始化栈 
 
 void push(SqStack *S,ElemType e);		//压栈
 
 ElemType pop(SqStack *S);				//弹栈 
 
 int stackEmpty(SqStack *S);			//判空
 
 int stackFull(SqStack *S);				//判满
 
 void printStack(SqStack *S);			//打印栈中元素 
 
 int main()
 {
 	SqStack *S = InitStack();
 
 	push(S,1);
 	push(S,2);
 	push(S,3);
 	push(S,4);
 	printStack(S);
 	
 	printf("%d ",pop(S));
 	printf("%d ",pop(S));
 	printf("%d ",pop(S));
 	printf("%d ",pop(S));
 	
 	printf("%d",pop(S));
 	
 	printf("%d",pop(S));
 	return 0;
 } 
 
 /*初始化栈*/
 SqStack* InitStack()
 {
 	SqStack *S = (SqStack *) malloc (sizeof(SqStack));
 	S->to
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
共享是指两个共享同一片内存空间,它们在内存空间的两端分别向中间生长。共享的实现可以采用两个指针top1和top2分别指向两个顶元素的位置,初始时,top1指向1的底位置,top2指向2的底位置。 下面是共享的基本操作: 1. 初始化共享 ``` #define MAXSIZE 100 //共享的最大长度 typedef struct { int data[MAXSIZE]; //共享的元素 int top1; //1的顶指针 int top2; //2的顶指针 }SharedStack; void InitStack(SharedStack *S) { S->top1 = -1; //1的顶指针初始化为-1 S->top2 = MAXSIZE; //2的顶指针初始化为MAXSIZE } ``` 2. 共享的入操作 ``` bool Push(SharedStack *S, int x, int stackNumber) { if (S->top1 + 1 == S->top2) //已满 return false; if (stackNumber == 1) //入1 S->data[++S->top1] = x; else if (stackNumber == 2) //入2 S->data[--S->top2] = x; return true; } ``` 3. 共享的出操作 ``` bool Pop(SharedStack *S, int *x, int stackNumber) { if (stackNumber == 1) //从1中出 { if (S->top1 == -1) //1为空 return false; *x = S->data[S->top1--]; } else if (stackNumber == 2) //从2中出 { if (S->top2 == MAXSIZE) //2为空 return false; *x = S->data[S->top2++]; } return true; } ``` 4. 共享的取顶元素操作 ``` bool GetTop(SharedStack *S, int *x, int stackNumber) { if (stackNumber == 1) //取1的顶元素 { if (S->top1 == -1) //1为空 return false; *x = S->data[S->top1]; } else if (stackNumber == 2) //取2的顶元素 { if (S->top2 == MAXSIZE) //2为空 return false; *x = S->data[S->top2]; } return true; } ``` 共享的其他操作与普通类似,比如判断是否为空、清空等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值