链式栈、队列

1、链式栈:

声明:

#ifndef _STACK_H
#define _STACK_H
#include<stdlib.h>

typedef int DataType;

typedef struct snode    //节点
{
    DataType data;
    struct snode *pnext;
}SNode_t;

typedef struct stack    //链表 
{
    SNode_t *ptop;
    int clen;
}Stack_t;

extern Stack_t *create_stack();
extern int push_stack(Stack_t *stack,DataType data);
extern int pop_stack(Stack_t *stack , DataType data);
extern int get_stack_top(Stack_t *stack,DataType *data);
extern void clear_stack(Stack_t *stack);
extern void destroy_stack(Stack_t *stack);
extern int is_empty_stack(Stack_t *stack);
extern void print_stack(Stack_t *stack);



#endif

链表:

Stack_t *create_stack()
{
    Stack_t *stack = malloc(sizeof(Stack_t));
    if(stack == NULL)
    {
        perror("create fail\n");
        return NULL;
    }
    stack->ptop = NULL;
    stack->clen =  0;
    return stack;
}

int push_stack(Stack_t *stack,DataType data)
{
    SNode_t *snode = malloc(sizeof(SNode_t));
    if(NULL == snode)
    {
        perror("fail malloc\n");
        return 0;
    }
    
    snode->data = data;
    snode->pnext = NULL;
    
    snode->pnext = stack->ptop;
    stack->ptop = snode;
    stack->clen++;
    return 1;
}

int get_stack_top(Stack_t *stack,DataType *data)
{
   if(stack->ptop == NULL) 
   {
    return 0;
   }
   *data = stack->ptop->data;
   printf("%d\n",*data);
   return 1;
}

int is_empty_stack(Stack_t *stack)
{
   return stack->ptop == NULL; 
}
int pop_stack(Stack_t *stack,DataType *data)
{
    if(is_empty_stack(stack))
    {
        return 0;
    }
    SNode_t *snode = stack->ptop;
    *data = snode->data;
    if(snode->pnext != NULL)
    {
    stack->ptop = snode->pnext;
    stack->clen--;
    }
    else
    {
        stack->ptop = NULL;
    }
    free(snode);
    return 1;
}

void destroy_stack(Stack_t *stack)
{
    DataType data;
    while(!(is_empty_stack(stack)))
    {
        pop_stack(stack,&data);
    }
    free(stack);
    return;
}

void clear_stack(Stack_t *stack)
{
    if(is_empty_stack(stack))
    {
        return;
    }
    SNode_t *snode = stack->ptop;
    while(stack->ptop != NULL)
    {
        snode = stack->ptop;
        stack->ptop = snode->pnext;
        free(snode);
    }
    stack->clen = 0;
}

void print_stack(Stack_t *stack)
{
    if(is_empty_stack(stack))
    {
        printf("stack empty");
        return;
    }
    SNode_t *snode = stack->ptop;
    while(snode != NULL)
    {
        printf("%d\n",snode->data);
        snode = snode->pnext;
    }
}

主函数调用:

#include<stdio.h>
#include"stack.h"

int main()
{
    DataType data;
    Stack_t *stack = create_stack();
    
    push_stack(stack,1);
    push_stack(stack,2);
    push_stack(stack,3);
    push_stack(stack,4);
    print_stack(stack);
    pop_stack(stack,&data);
   
    print_stack(stack);
    get_stack_top(stack,&data);
    //clear_stack(stack);
    //print_stack(stack);
    printf("----------\n");
    destroy_stack(stack);
    return 0;
}

2、队列

声明:

#ifndef _QUEUE_H
#define _QUEUE_H
#include <pthread.h>
#include<stdlib.h>

typedef int QDataType;

typedef struct qnode           //节点
{
    QDataType data;
    struct qnode *pnext;
}Qnode_t;

typedef struct queue   //队列
{
    Qnode_t *pfront;
    Qnode_t *prear;
    int clen;
    pthread_mutex_t mutex;
}Queue_t;

Queue_t *create_queue();
int is_empty_queue(Queue_t*queue);
int push_queue(Queue_t* queue,QDataType data);
int pop_queue(Queue_t *queue,QDataType *data);
int get_queue_front(Queue_t *queue,QDataType *data);
void clear_queue(Queue_t *queue);
void destroy_queuey(Queue_t *queue);
extern void print_queue(Queue_t *queue);

#endif

队列:

#include<stdio.h>
#include"queue.h"

Queue_t *create_queue()
{
    Queue_t *queue = malloc(sizeof(Queue_t));
    if(queue == NULL)
    {
        perror("fail create_queue ");
        return NULL;
    }
    queue->pfront = NULL;
    queue->prear = NULL;
    queue->clen = 0;
    return queue;
}

int is_empty_queue(Queue_t *queue)
{
    return queue->pfront == NULL;
}

int push_queue(Queue_t *queue,QDataType data)
{
    Qnode_t *qnode = malloc(sizeof(Qnode_t));
	if (NULL == qnode)
	{
		perror("fail malloc");
		return -1;
	}
	qnode->data = data;
    qnode->pnext = NULL;
    if(is_empty_queue(queue))
    {
        queue->pfront = qnode;
        queue->prear = qnode;
    }
    else
    {
        queue->prear->pnext = qnode;
        queue->prear = qnode;
    }
    queue->clen++;
    return 0;
}
void print_queue(Queue_t *queue)
{
    Qnode_t *qnode = queue->pfront;
    while(qnode != NULL)
    {
        printf("%d",qnode->data);
        qnode = qnode->pnext;
    }
    printf("\n");
}
int pop_queue(Queue_t *queue,QDataType *data)
{
    if(is_empty_queue(queue))
    return 0;
    Qnode_t *qnode = queue->pfront;
    queue->pfront = qnode->pnext;
    if(data != NULL)
    {
        *data = qnode->data;
    }
    free(qnode);
    if(NULL == queue->pfront)
    {
        queue->prear = NULL;
    }
    queue->clen--;
    return 1;
}

int get_queue_front(Queue_t *queue,QDataType *data)
{
    if(is_empty_queue(queue))
        return 0;
    if(data == NULL)
        return 0;
    *data = queue->pfront->data;
    
    printf("*data = %d\n", *data);

    return 1;
}

void clear_queue(Queue_t *queue)
{
    while(!is_empty_queue(queue))
    {
        pop_queue(queue,NULL);
    }
}

void destroy_queuey(Queue_t *queue)
{
    clear_queue(queue);
    free(queue);
}

主函数调用

#include<stdio.h>
#include"queue.h"

int main(void)
{
    QDataType data;
    int ret;
    Queue_t *queue = create_queue();
    if(queue == NULL)
    {
        perror("fail create");
        return 0;
    }
    push_queue(queue,1);
    push_queue(queue,2);
    push_queue(queue,3);
    push_queue(queue,4);
    
    print_queue(queue); // 1234 
    pop_queue(queue,&data); //234
    pop_queue(queue,&data);  //34
    print_queue(queue);
    ret = get_queue_front(queue,&data);
    if(ret != 0)
    {
        printf("get head = %d\n",ret);
    }
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/872634.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【python】—— Python爬虫实战:爬取珠海市2011-2023年天气数据并保存为CSV文件

目录 目标 准备工作 爬取数据的开始时间和结束时间 爬取数据并解析 将数据转换为DataFrame并保存为CSV文件 本文将介绍如何使用Python编写一个简单的爬虫程序,以爬取珠海市2011年至2023年的天气数据,并将这些数据保存为CSV文件。我们将涉及到以下知识点: 使用r…

金九银十,自动化测试面试题精选【美团二面】

面试一般分为技术面和hr面&#xff0c;形式的话很少有群面&#xff0c;少部分企业可能会有一个交叉面&#xff0c;不过总的来说&#xff0c;技术面基本就是考察你的专业技术水平的&#xff0c;hr面的话主要是看这个人的综合素质以及家庭情况符不符合公司要求&#xff0c;一般来…

Kubernetes 上安装 Jenkins

安装 Helm curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash添加 Jenkins Helm 仓库 首先添加 Jenkins Helm 仓库 helm repo add jenkins https://charts.jenkins.io helm repo update安装 Jenkins 使用 Helm 安装 Jenkins 的最新版本&…

uni-app应用更新(Android端)

关于app更新&#xff0c;uni-app官方推荐的是 uni-upgrade-center&#xff0c;看了下比较繁琐&#xff0c;因此这里自己实现检查更新并下载安装的逻辑。 1.界面效果 界面中的弹框和 进度条采用了uView 提供的组件 2.检查更新并下载安装 一、版本信息配置在服务端&#xff0c…

时装爱好者的网页购物天堂:Spring Boot技术探索

第2章相关技术 2.1 B/S架构 B/S结构的特点也非常多&#xff0c;例如在很多浏览器中都可以做出信号请求。并且可以适当的减轻用户的工作量&#xff0c;通过对客户端安装或者是配置少量的运行软件就能够逐步减少用户的工作量&#xff0c;这些功能的操作主要是由服务器来进行控制的…

详解TensorRT的C++高性能部署以及C++部署Yolo实践

详解TensorRT的C高性能部署 一. ONNX1. ONNX的定位2. ONNX模型格式3. ONNX代码使用实例 二、TensorRT1 引言 三、C部署Yolo模型实例 一. ONNX 1. ONNX的定位 ONNX是一种中间文件格式&#xff0c;用于解决部署的硬件与不同的训练框架特定的模型格式的兼容性问题。 ONNX本身其…

JAVA数据导出为Excel

目录 一、导入依赖 二、使用的相关类 1、XSSFWorkbook 构造方法 创建表 操作表 保存表 样式和格式 日期处理 密码保护 其他 2、XSSFSheet 获取属性和信息 行操作 列操作 表的属性 合并单元格 保护表 页眉和页脚 注释 其它 3、XSSFRow 获取属性和信息 单…

单点登录OAuth2.0

OAuth 2.0&#xff08;Open Authorization 2.0&#xff09;是OAuth协议的第二个版本&#xff0c;于2012年正式成为RFC 6749标准。在OAuth 2.0之前&#xff0c;OAuth 1.0版本已经为Web应用提供了一定程度的授权功能&#xff0c;但随着时间的推移&#xff0c;这些版本逐渐显露出一…

Nginx: TCP建立连接的优化和启用Fast Open功能

TCP 建立连接优化 在三次握手中&#xff0c;相关TCP的内核参数可优化这一过程 net.ipv4.tcp_syn_retries 6net.ipv4.tcp_synack_retries 5net.ipv4.tcp_syncookies 0net.ipv4.tcp_max_syn_backlognet.core.somaxconnnet.core.netdev_max_backlog 1 &#xff09; net.ipv4…

C语言之猜数字小游戏

哈喽&#xff0c;大家好&#xff01;我是冰淇淋加点糖。今天我们来用前面所学的知识来开发一个猜数字的小游戏&#xff0c;锻炼我们的编程能力和编程思维。 猜数字小游戏功能简介 1.随机生成一个1-100的数字。 2.玩家用户开始猜数字。 > 猜大了&#xff0c;提醒猜大了…

【知识库系列】MPR/多模态方向观察:图像视频与3D生成

多模态背后的backbone会长成什么样&#xff1f; 各种模态到梯度下降到最后会不会都差不多&#xff1f; Sora 是不是已经被追上了? 我们真的把视频数据都用好了吗&#xff1f; 知识库完整文档&#xff1a; MPR/多模态方向观察&#xff1a;图像视频与3D生成&#xff1a;https…

SpringBoot实现前后端传输加密设计

在Web应用中&#xff0c;确保前后端之间的数据传输安全是非常重要的。这通常涉及到使用HTTPS协议、数据加密、令牌验证等安全措施。本文通过将前后端之间的传输数据进行加密&#xff0c;用于在Spring Boot应用中实现前后端传输加密设计。 一、数据加密方案 即使使用了HTTPS&…

java利用JXL操作excel

通过JXL操作Excel JXL是韩国人所著,目前停止更新,只支持xls格式,即2007之前的版本 import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java…

c# checkbox的text文字放到右边

checkbox的text文字放到右边 实现方法如下图 特此记录 anlog 2024年9月2日

Tensorflow实现深度学习8:猫狗识别

本文为为&#x1f517;365天深度学习训练营内部文章 原作者&#xff1a;K同学啊 一 导入数据 import matplotlib.pyplot as plt import tensorflow as tf # 支持中文 plt.rcParams[font.sans-serif] [SimHei] # 用来正常显示中文标签 plt.rcParams[axes.unicode_minus] Fals…

带AI功能朵米客服系统3.5无限制开心版+搭建文档

带AI功能朵米客服系统3.5无限制开心版搭建文档&#xff0c;朵米客服系统是一款全功能的客户服务解决方案&#xff0c;提供多渠道支持&#xff08;如在线聊天、邮件、电话等&#xff09;&#xff0c;帮助企业建立与客户的实时互动。该系统具有智能分流功能&#xff0c;可以快速将…

万象奥科参展“2024 STM32全国巡回研讨会”—深圳站、广州站

9月3日-9月5日&#xff0c;万象奥科参展“2024 STM32全国巡回研讨会”— 深圳站、广州站。此次STM32研讨会将会走进全国11个城市&#xff0c;展示STM32在智能工业、无线连接、边缘人工智能、安全、图形用户界面等领域的产品解决方案及多样化应用实例&#xff0c;深入解读最新的…

【RabbitMQ之一:windows环境下安装RabbitMQ】

目录 一、下载并安装Erlang1、下载Erlang2、安装Erlang3、配置环境变量4、验证erlang是否安装成功 二、下载并安装RabbitMQ1、下载RabbitMQ2、安装RabbitMQ3、配置环境变量4、验证RabbitMQ是否安装成功5、启动RabbitMQ服务&#xff08;安装后服务默认自启动&#xff09; 三、安…

VR虚拟展厅的应用场景有哪些?

虚拟展厅作为一种利用虚拟现实技术构建的三维展示空间&#xff0c;其应用场景广泛且多样。视创云展为企业虚拟展厅搭建提供技术支持。以下是一些主要的应用场景&#xff1a; 1. 博物馆和艺术展览 文物保护与展示&#xff1a; 在博物馆中&#xff0c;为了保护珍贵的文物和艺术…

【node.js】基础之修改文件

node.js 基础(一) node.js是什么&#xff1f; 上面这句话的意思就是&#xff1a;Node.js 是一个开源的&#xff0c;跨平台的javascript运行环境。通俗的说就是一个应用程序或者说是一个软件&#xff0c;可以运行javascript。 Node.js的作用&#xff1a; 开发服务器应用。 将数…