C++——栈的基本操作

在C++中,栈是一种常见的数据结构,遵循先进后出(LIFO)的原则。栈的使用非常广泛,例如在函数调用中用于保存局部变量、在表达式求值中用于保存操作数等

栈的基本操作大致包括6个:

1. InitStack(&s):初始化一个空栈;
2. StackEmpty(s):判断一个在栈是否为空;
3. Push(&s,x):入栈,若栈S未满,这将x加入栈,使之称为栈顶;
4. Pop(&s):出栈,若栈S非空,则弹出栈顶元素;
5. GetTop(s,x):读栈顶元素;
6. DestroyStack(&s):销毁栈,释放栈S所占用内存空间;

1.创建一个空栈:

void stackinit(sq& s)
{
	s.top = -1;
}

2.StackEmpty(s):判断一个在栈是否为空:

bool stackempty(sq s)
{
	if (s.top == -1) return true; //为空返回true
	else return false; //不为空返回false
}

3.Push(&s,x):入栈,若栈S未满,这将x加入栈,使之称为栈顶:

bool push(sq& s, int x)
{
	if (s.top == maxsize - 1) return false; 
//如果栈空间满,则不能再插入元素,否则导致内存溢出,直接返回false;
	s.data[++s.top] = x;
 //栈不满,则可以插入元素,将栈顶指针上移,再将需要插入的元素赋值给栈顶
	return true;
}

4.Pop(&s):出栈,若栈S非空,则弹出栈顶元素:

void pop(sq& s)
{
	if (s.top == -1) cout << "栈空"<<endl; //栈为空,则不能出栈。
	s.top--; //栈不空,能出栈,栈顶指针下移
}

5.GetTop(s,x):读栈顶元素:

int gettop(sq s)
{
	int x; //接收栈顶元素 
	if (s.top == -1) return -1; //栈空,无法读取元素
	x = s.data[s.top]; //栈不空,将当前栈顶元素赋值给x
	return x; //返回x的值,即读取x的值
}

6.输出栈中所有元素:

void printStack() {
        if (top == -1) {
            cout << "Stack is empty." <<endl;
            return;
        }
        for (int i = top; i >= 0; i--) {
            cout << stack[i] << " ";
        }
    }

7.DestroyStack(&s):销毁栈,释放栈S所占用内存空间:

void destorystack(sq &s) {
	if (s.top!=-1) free(s.data); //若栈不空,释放栈所占用的内存空间
	s.top = -1;
}

整体代码:

#include<iostream>
using namespace std;
#define maxsize 10
typedef struct {
	int data[maxsize];
	int top;
}sq;
void stackinit(sq& s)
{
	s.top = -1;
}
bool stackempty(sq s)
{
	if (s.top == -1) return true;
	else return false;
}
bool push(sq& s, int x)
{
	if (s.top == maxsize - 1) return false;
	s.data[++s.top] = x;
	return true;
}
void pop(sq& s)
{
	if (s.top == -1) cout << "栈空"<<endl;
	s.top--;
}
int gettop(sq s)
{
	int x;
	if (s.top == -1) return -1;
	x = s.data[s.top];
	return x;
}
void printStack() {
        if (top == -1) {
            cout << "Stack is empty." <<endl;
            return;
        }
        for (int i = top; i >= 0; i--) {
            cout << data[i] << " ";
        }
    }
void destorystack(sq &s) {
	if (s.top!=-1) free(s.data);
	s.top = -1;
}
int main() {
	sq s1;
	stackinit(s1);
	for (int i = 0; i < 10; i++)
	{
		push(s1, i);
	}
	while (!stackempty(s1))
	{
		cout << gettop(s1)<< " ";
		s1.top--;
	}	
	cout << endl;
	for (int i = 0; i < 10; i++)
	{
		push(s1, i);
	}
	pop(s1);
	while (!stackempty(s1))
	{
		cout << gettop(s1) << " ";
		s1.top--;
	}
	destorystack(s1);
	return 0;
}

输出:

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
map是一种基于哈希表实现的数据结构,它允许存储一对键值对,并按照的方式对这些键值对进行操作。在C语言中,我们可以通过以下方式实现map基本操作: 1. 初始化:首先,我们需要定义一个空的map,并分配内存空间来存储键值对。可以使用一个结构体来表示一个键值对,例如: ```c typedef struct { int key; int value; } KeyValuePair; KeyValuePair* stack; int top = -1; int capacity = 10; ``` 2. 入:在map中,入操作将一个键值对添加到的顶部。我们可以将键值对添加到数组stack的末尾,并更新top变量的值。如果已满,可以考虑动态扩容。 ```c void push(int key, int value) { if (top == capacity - 1) { // 已满,执行动态扩容操作 // ... } KeyValuePair* pair = malloc(sizeof(KeyValuePair)); pair->key = key; pair->value = value; stack[++top] = *pair; } ``` 3. 出:出操作将顶的键值对移除,并返回该键值对。我们可以通过减小top的值来实现出操作。 ```c KeyValuePair pop() { if (top == -1) { // 为空,返回一个默认的键值对或者抛出异常 // ... } KeyValuePair pair = stack[top]; top--; return pair; } ``` 4. 获取顶元素:获取顶元素操作返回顶的键值对,但不对进行任何修改。 ```c KeyValuePair topElement() { if (top == -1) { // 为空,返回一个默认的键值对或者抛出异常 // ... } return stack[top]; } ``` 需要注意的是,上述代码只是简单示例,并没有完整处理异常情况和动态扩容等操作。在实际应用中,可能需要根据具体需求进行适当的修改和优化。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值