栈 数组

#include <iostream>
using namespace std;

typedef int T;

class Stack{
	T a[10];	
	int num;	//记录已经放入的元素个数 
public:
	void push(const T& t)
	{
		if (full())
			throw "stack overflow";
		a[num++] = t;		
	}
	void pop()
	{
		if (empty())
			throw "empty stack";
		num--;	
	}
	T top()
	{
		if (empty())
			throw "no top stack";
		return a[num-1];
	}
 	bool empty()
 	{
	 	return num == 0;	
    }
    bool full()
    {
    	return num == 10;	
    }
	int size()
	{
		return num;	
	} 
	int capacity()
	{
		return 10;
	}
	void clear()
	{
		num = 0;
	}
	Stack():num(0)
	{
		
	}
};

int main()
{
	Stack s;
	s.push(1);
	s.push(2);
	s.push(3);
	/*
	for (int i=0; i<10; i++)
	{
		s.push(i*5);
	}
	*/
	while(!s.empty())
	{
		cout << s.top() << ' ';
		s.pop();
	}
	cout << endl;
/*	for (int i=0; i<10; i++)
		s.push(i);
	cout << "full?" << s.full() << endl;
	s.push(100); //there is  an exception
	cout << "cant see this" << endl;
*/
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是双初始化、判断空、满、进和出等算法的函数: ``` #include <stdio.h> #include <stdlib.h> #define ERROR -1 #define OK 1 typedef int SElemType; typedef struct { int top[2], bot[2]; // 顶和底指针 SElemType *V; // 数组 int m; // 最大可容纳元素个数 } DblStack; // 双初始化 int InitDblStack(DblStack *S, int m) { S->V = (SElemType *)malloc(m * sizeof(SElemType)); if (!S->V) { return ERROR; } S->top[0] = -1; S->bot[0] = 0; S->top[1] = m; S->bot[1] = m - 1; S->m = m; return OK; } // 判断空 int IsDblStackEmpty(DblStack S, int i) { if (i == 0) { return S.top[0] == -1; } else if (i == 1) { return S.top[1] == S.m; } else { return ERROR; } } // 判断满 int IsDblStackFull(DblStack S) { return S.top[0] + 1 == S.top[1]; } // 进 int PushDblStack(DblStack *S, int i, SElemType e) { if (IsDblStackFull(*S)) { return ERROR; } if (i == 0) { S->top[0]++; S->V[S->top[0]] = e; } else if (i == 1) { S->top[1]--; S->V[S->top[1]] = e; } else { return ERROR; } return OK; } // 出 int PopDblStack(DblStack *S, int i, SElemType *e) { if (IsDblStackEmpty(*S, i)) { return ERROR; } if (i == 0) { *e = S->V[S->top[0]]; S->top[0]--; } else if (i == 1) { *e = S->V[S->top[1]]; S->top[1]++; } else { return ERROR; } return OK; } int main() { DblStack S; int m = 10; InitDblStack(&S, m); PushDblStack(&S, 0, 1); PushDblStack(&S, 1, 2); SElemType e; PopDblStack(&S, 0, &e); printf("%d\n", e); PopDblStack(&S, 1, &e); printf("%d\n", e); return 0; } ``` 其中,InitDblStack函数用于初始化双,IsDblStackEmpty函数用于判断空,IsDblStackFull函数用于判断满,PushDblStack函数用于进,PopDblStack函数用于出。在主函数中,我们先初始化双,然后分别向两个中压入元素,再从两个中分别弹出元素并输出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值