IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 数据结构_C_数组栈 -> 正文阅读

[数据结构与算法]数据结构_C_数组栈

数组栈,在数组顺序表的基础上,融合栈 头进尾出的特点,即只可以尾插尾删;另外,需要top一个结构体成员来记录栈顶位置,取栈顶元素和插、删数据!

Stack.h
#pragma once

#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
#include<stdbool.h>

//栈:数组栈   栈的元素:数据,指针,栈顶;
//数组栈->尾插+尾删 ;top从0开始,先赋值后top++;

typedef struct stack {
	int* p;
	int capacity;
	int top;
}StackNode;

void InitStack(StackNode* head);

void StackPush(StackNode* head, int x);

void StackPop(StackNode* head);

int StackTop(StackNode* head);

bool Emp(StackNode* head);

void Display(StackNode* head);

void Destory(StackNode* head);
Stack.c
#include"stack.h"

//初始化
void InitStack(StackNode* head) {
	//head->data = 0;
	head->p = malloc(sizeof(StackNode)*4);
	if (head->p == NULL) {
		printf("malloc init failed \n");
		exit(-1);
	}
	head->top = 0;
	head->capacity = 5;
}

//压栈
void StackPush(StackNode* head, int x) {
	assert(head);
	//判断是否需要扩容
	if (head->top == head->capacity)
	{
		StackNode* tmp = malloc(sizeof(StackNode) * head->capacity * 2);
		if (tmp == NULL)
		{
			return printf("malloc failed\n");
			exit(-1);
		}
		else
		{
			head->p = tmp;
			head->capacity *= 2;
		}
	}
	//压栈 即尾插
	head->p[head->top] = x;
	head->top++;
}

//出栈
void StackPop(StackNode* head) {
	assert(head);
	assert(head->top > 0);
	head->top--;
}

//取栈顶元素
int StackTop(StackNode* head) {
	assert(head);
	return head->p[head->top-1];
}
//判断是否为空
bool Emp(StackNode* head) {
	assert(head);
	return head->top == 0;
}
//打印
void Display(StackNode* head) {
	assert(head);
	StackNode* cur = head;
	for (size_t i = 0; i < head->top; i++)
	{
		printf("%d,",cur->p[i]);
	}
	printf("\n");
}
//内存释放
void Destory(StackNode* head) {
	free(head->p);
	head->p == NULL;
	head->top = head->capacity = 0;
}

main.c
#include"stack.h"

void main() {
	StackNode s;
	InitStack(&s);
	StackPush(&s, 1);
	StackPush(&s, 2);
	StackPush(&s, 3);

	Display(&s);
	StackPop(&s,3);
	StackPop(&s, 2);

	Display(&s);
	int res = StackTop(&s);
	printf("栈顶元素为:%d \n",res);
	bool b = Emp(&s);
	printf("%d",b);
	Destory(&s);


}

结果:
在这里插入图片描述

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-08-15 15:50:18  更:2021-08-15 15:51:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 17:23:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计