个人笔记——栈

栈:先进后出;可用数组或链表实现

cs 复制代码
#include<stdlib.h>
#define MaxSize 5
typedef struct{
	int data[MaxSize];
	int top;
}Stack;
//初始化栈
void init(Stack *stack){
	stack->top=-1;
} 
//入栈操作
void push(Stack *stack,int value){
	if(stack->top==MaxSize-1){
		printf("栈已满,无法插入数据");
		return;
	}
	stack->top=stack->top+1;
	stack->data[stack->top]=value;
} 
//出栈操作
void pop(Stack *stack){
	if(stack->top==-1){
		printf("栈已空");
		return;
	}
	printf("%d",stack->data[stack->top]);
	stack->top--;
} 

链表实现栈

cs 复制代码
typedef struct node{
	int data;
	struct node *next;
}Node;
void init(Node *head){
	head->next=NULL;
} 
//入栈
void pushNode(Node *head,int value){
	Node *newNode = (Node *)malloc(sizeof(Node));
	newNode->data=value;
	newNode->next=NULL;
	newNode->next=head->next;
	head->next=newNode;
} 
//出栈
void popNode(Node *head){
	if(head->next==NULL){
		return;
	}
	Node *temp=head->next;
	printf("%d\n",temp->data);
	head->next=temp->next;
} 
int main(){
	Node *head=(Node *)malloc(sizeof(Node));
	init(head);
	pushNode(head,2);
	pushNode(head,4);
	pushNode(head,8);
	pushNode(head,11);
	popNode(head);
	popNode(head);
}

数组实现队列

判断入栈出栈的合法性

cs 复制代码
bool validateStackSequences(int* pushed, int pushedSize, int* popped, int poppedSize) {
     int *s=(int *)malloc(pushedSize*sizeof(int));
        int j=0;
        int top=-1;
        for(int i=0;i<poppedSize;i++){
            top++;
            s[top]=pushed[i];
            while(top!=-1 && s[top]==popped[j]){
                j++;
                top--;
            }
        }
        if(top!=-1){
            return false;
        }else{
            return true;
        }
    
}
相关推荐
职豚求职小程序5 分钟前
易方达基金27秋招笔试|场次+考情全梳理
笔记
Swilderrr13 小时前
论文精读:《Directory-Aware Query and Maintenance in Vector Databases》
笔记·学习
SatanII13 小时前
K8s 存储与配置管理|Volume、ConfigMap、Secret 核心笔记
笔记·rpc·kubernetes
I'mChloe15 小时前
飞牛NAS部署flatnotes实战:Docker、8080端口、Markdown笔记与固定地址访问
笔记·docker·容器
库玛西15 小时前
外部排序全解析:败者树、置换-选择排序与最佳归并树
c语言·数据结构·c++·笔记·考研·算法
摇滚侠15 小时前
《Java并发编程之美》第 2 章 并发编程的其他基础知识 阅读笔记 3
android·java·笔记
ss27316 小时前
AI时代首先数据库-PostgreSQL实战笔记 | 18 PostgreSQL基本索引原理与创建
数据库·笔记·postgresql
qq_2842740518 小时前
电气控制笔记:常用低压电器符号原理与异步电动机点动、自锁、多地控制电路(含考点)
笔记·学习·自动化·制造
坤坤子吖18 小时前
Linux 线程同步与互斥——条件变量与线程同步
linux·开发语言·c++·笔记·学习
乐橙开放平台18 小时前
不用换摄像头,如何用乐橙把海康、大华、宇视统一到一个界面
笔记·物联网·自动化·音视频·智能家居