当前位置:网站首页>I 用c I 实现“栈”
I 用c I 实现“栈”
2022-06-30 15:44:00 【MT_125】
目录
一、了解栈的结构特点
1、栈是一种特殊的线性表,只允许从一端进出数据,称为后进先出,先进后出。
压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶出栈:栈的删除操作叫做出栈。出数据也在栈顶

二、具体实现
由于栈实质是一种线性表,因此可以用两种方式来实现:顺序表 或 链表
这里我使用的是类似顺序表的方式来实现。
代码如下:
typedef char Stacktype;
typedef struct Stack
{
int top;
Stacktype* data;
int capacity;
}Stack;
void Stack_init(Stack* pphead); //栈的初始化
void Stack_destory(Stack* pphead); //栈的清空
void Stack_push(Stack* pphead, Stacktype data); //插入数据,压栈
void Stack_pop(Stack* pphead); //出栈(删除数据)
bool Stack_Empty(Stack* pphead); //判断栈是否为空
Stacktype Stack_Top(Stack* pphead); //调出栈顶元素
int Stack_Size(Stack* pphead); //查看数据个数
//栈的初始化
void Stack_init(Stack* pphead)
{
pphead->top = 0;
pphead->capacity = 0;
pphead->data = NULL;
}
//栈的清空
void Stack_destory(Stack* pphead)
{
pphead->top = 0;
pphead->capacity = 0;
free(pphead->data);
pphead->data = NULL;
}
//插入数据,压栈
void Stack_push(Stack* pphead, Stacktype data)
{
assert(pphead);
if (pphead->top == pphead->capacity)
{
int Newcapacity = (pphead->capacity == 0) ? 4 : ((pphead->top) * 2);
Stacktype* temp = NULL;
temp = (Stacktype*)realloc(pphead->data, sizeof(Stacktype) * Newcapacity);
if (temp == NULL)
{
printf("Stack_push");
exit(-1);
}
pphead->data = temp;
pphead->top = Newcapacity;
}
(pphead->data)[pphead->capacity] = data;
pphead->capacity++;
}
//出栈(删除数据)
void Stack_pop(Stack* pphead)
{
assert(pphead);
assert(Stack_Empty(pphead));
pphead->capacity--;
}
//判断栈是否为空
bool Stack_Empty(Stack* pphead)
{
assert(pphead);
return pphead->capacity != 0;
}
//调出栈顶元素
Stacktype Stack_Top(Stack* pphead)
{
assert(pphead);
assert(Stack_Empty(pphead));
return pphead->data[pphead->capacity - 1];
}
//查看数据个数
int Stack_Size(Stack* pphead)
{
assert(pphead);
return pphead->top;
}边栏推荐
- Modifying MySQL password under Linux: error 1396 (HY000): Operation alter user failed for 'root' @ 'localhost‘
- CloudXR如何推动XR的未来发展
- Oracle 导出视图的创建语句
- Google Play 索引表
- Build cloud native observability capability suitable for organizations
- Compulsory national standard for electronic cigarette GB 41700-2022 issued and implemented on October 1, 2022
- 剑指 Offer II 080. 含有 k 个元素的组合 回溯
- ASP. Net core Middleware
- Hundreds of lines of code to implement a JSON parser
- Implementation of Devops in the core field of qunar, the Internet R & D Efficiency
猜你喜欢

Policy Center > Misrepresentation

Advanced C language - pointer 3 - knowledge points sorting

Alibaba cloud OSS object storage cross domain settings

今晚19:00知识赋能第2期直播丨OpenHarmony智能家居项目之控制面板界面设计

Phone number shielding function

Simulation of two-color ball system to judge the winning situation

Open source STM32 USB-CAN project

Mysql事务/锁/日志总结

大学生研究生毕业找工作,该选择哪个方向?

Policy Center > Device and Network Abuse
随机推荐
KDD 2022 | 我们离通用预训练推荐模型还有多远?推荐系统的通用序列表示学习模型 UniSRec
大学生研究生毕业找工作,该选择哪个方向?
Warning: [antd: Menu] `children` will be removed in next major version. Please use `items` instead.
分布式机器学习:模型平均MA与弹性平均EASGD(PySpark)
Build cloud native observability capability suitable for organizations
数据治理市场:亿信华辰朝左,华傲数据向右
Go micro installation
go-zero微服务实战系列(八、如何处理每秒上万次的下单请求)
MySQL master-slave configuration
互联网研发效能之去哪儿网(Qunar)核心领域DevOps落地实践
[sub matrix quantity statistics] cf1181c flag sub matrix quantity statistics
flink sql cdc 同步sqlserver 报错什么原因啊
ASP. Net core Middleware
What role does "low code" play in enterprise digital transformation?
有意思的鼠标指针交互探究
ASP. Send information in sinalr controller of net core
Message queue ten questions
topic: Privacy, Deception and Device Abuse
Table responsive layout tips for super nice
In depth analysis of the core code of the gadgetinspector