C語言數據結構-鏈式棧

頭文件:stack.h

#ifndef __STACK_H__
#define __STACK_H__

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

typedef int DataType;

/* 鏈式棧節點類型 */
typedef struct staNode
{
?? ?DataType data;
?? ?struct staNode *pNext;
}StackNode;


/* 鏈式棧標簽類型 */
typedef struct list
{
?? ?StackNode *pTop; ? //指向棧頂指針
?? ?int cLen;
}StackList;

extern StackList *createSatckList();
extern int isEmptyStackList(StackList *);
extern int pushStackList(StackList *, DataType );
extern int popStackList(StackList *, DataType *);
extern DataType getStackTop(StackList *);
extern void clearStackList(StackList *);
extern void destroyStackList(StackList **);

extern void showStackList(StackList *pList);
#endif
源文件:stack.c main.c

stack.c

#include "stack.h"

StackList *createSatckList()
{
?? ?StackList *pList = malloc(sizeof(StackList));
?? ?if (NULL == pList)
?? ?{
?? ??? ?perror("fail to malloc");
?? ??? ?return NULL;
?? ?}
?? ?pList->pTop = NULL;
?? ?pList->cLen = 0;

?? ?return pList;
}


int isEmptyStackList(StackList *pList)
{
?? ?return pList->cLen == 0;
}

入棧:
int pushStackList(StackList *pList, DataType data)
{
?? ?StackNode *pTmpNode = malloc(sizeof(StackNode));
?? ?if (NULL == pTmpNode)
?? ?{
?? ??? ?perror("fail to malloc");
?? ??? ?return -1;
?? ?}
?? ?pTmpNode->data = data;
?? ?pTmpNode->pNext = NULL;

?? ?pTmpNode->pNext = pList->pTop;
?? ?pList->pTop = pTmpNode;
?? ?pList->cLen++;

?? ?return 0;
}

遍歷:

void showStackList(StackList *pList)
{
?? ?StackNode *pTmpNode = pList->pTop;
?? ?while (pTmpNode != NULL)
?? ?{
?? ??? ?printf("%d ", pTmpNode->data);
?? ??? ?pTmpNode = pTmpNode->pNext;
?? ?}
?? ?printf("\n");
}

出棧:
int popStackList(StackList *pList, DataType *pOutData)
{
?? ?if (isEmptyStackList(pList))
?? ?{
?? ??? ?return 0;
?? ?}
?? ?StackNode *pTmpNode = pList->pTop;
?? ?if (NULL != pOutData)
?? ?{
?? ??? ?*pOutData = pTmpNode->data;
?? ?}
?? ?pList->pTop = pTmpNode->pNext;
?? ?free(pTmpNode);
?? ?pList->cLen--;

?? ?return 0;
}

DataType getStackTop(StackList *pList)
{
?? ?if (!isEmptyStackList(pList))
?? ?{
?? ??? ?return pList->pTop->data;
?? ?}
}

void clearStackList(StackList *pList)
{
?? ?while (pList->pTop != NULL)
?? ?{
?? ??? ?popStackList(pList, NULL);
?? ?}
}

銷毀:

void destroyStackList(StackList **ppList)
{
?? ?clearStackList(*ppList);
?? ?free(*ppList);
?? ?*ppList = NULL;
}
main.c

#include "stack.h"


int main(int argc, const char *argv[])
{
?? ?StackList *pList = NULL;
?? ?DataType OutData;

?? ?pList = createSatckList();

?? ?pushStackList(pList, 1);
?? ?pushStackList(pList, 2);
?? ?pushStackList(pList, 3);
?? ?pushStackList(pList, 4);

?? ?showStackList(pList);

?? ?popStackList(pList, &OutData);
?? ?printf("pop data = %d\n", OutData);

?? ?showStackList(pList);

?? ?destroyStackList(&pList);
?? ?return 0;
}
?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/907676.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/907676.shtml
英文地址,請注明出處:http://en.pswp.cn/news/907676.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

M4Pro安裝ELK(ElasticSearch+LogStash+Kibana)踩坑記錄

ElasticSearch安裝&#xff0c;啟動端口9200&#xff1a; docker pull elasticsearch:8.13.0 新增配置文件elasticsearch.yml&#xff1a; cd /opt/homebrew/etc/ mkdir elasticsearch_config cd elasticsearch_config vi elasticsearch.yml cluster.name: "nfturbo…

uni-app學習筆記十六-vue3頁面生命周期(三)

uni-app官方文檔頁面生命周期部分位于頁面 | uni-app官網。 本篇再介紹2個生命周期 1.onUnload&#xff1a;用于監聽頁面卸載。 當頁面被關閉時&#xff0c;即頁面的緩存被清掉時觸發加載onUnload函數。 例如:在demo6頁面點擊跳轉到demo4&#xff0c;在demo4頁面回退不了到d…

Java互聯網大廠面試:從Spring Boot到Kafka的技術深度探索

Java互聯網大廠面試&#xff1a;從Spring Boot到Kafka的技術深度探索 在某家互聯網大廠的面試中&#xff0c;面試官A是一位技術老兵&#xff0c;而被面試者謝飛機&#xff0c;號稱有豐富的Java開發經驗。以下是他們的面試情景&#xff1a; 場景&#xff1a;電商平臺的后端開發…

機器學習算法——KNN

一、KNN算法簡介 1.KNN思想 &#xff08;1&#xff09;K-近鄰算法 根據你的“鄰居”來推斷你是什么類別 KNN算法思想&#xff1a;如果一個樣本在特征空間&#xff08;訓練集&#xff09;中的k個最相似的樣本中的大多數屬于某一個類別。則該樣本也屬于這個類別 &#xff08…

如何評估CAN總線信號質量

CAN總線網絡的性能在很大程度上取決于其信號質量。信號質量差可能導致通信錯誤&#xff0c;進而引發系統故障、效率降低甚至安全隱患。因此&#xff0c;評估和確保CAN總線信號質量是維護系統健康和可靠性的關鍵。 在CAN總線網絡中&#xff0c;數據通過雙絞線上的差分信號傳輸。…

封裝一個小程序選擇器(可多選、單選、搜索)

組件 <template><view class"popup" v-show"show"><view class"bg" tap"cancelMultiple"></view><view class"selectMultiple"><view class"multipleBody"><view class&…

2.1HarmonyOS NEXT開發工具鏈進階:DevEco Studio深度實踐

HarmonyOS NEXT開發工具鏈進階&#xff1a;DevEco Studio深度實踐 在HarmonyOS NEXT全棧自研的技術體系下&#xff0c;DevEco Studio作為一站式開發平臺&#xff0c;通過深度整合分布式開發能力&#xff0c;為開發者提供了從代碼編寫到多端部署的全流程支持。本章節將圍繞多設…

LLMs之Tool:Workflow Use的簡介、特點、安裝和使用方法、以及案例應用

LLMs之Tool&#xff1a;Workflow Use的簡介、特點、安裝和使用方法、以及案例應用 目錄 Workflow Use的簡介 1、Workflow Use的特點 2、Workflow Use的愿景和路線圖 Workflow Use的安裝和使用方法 1、安裝 2、使用方法 查看所有命令 從 Python 中使用&#xff1a; 啟動…

二分法算法技巧-思維提升

背景&#xff1a; 在寫力扣題目“搜素插入位置 ”時&#xff0c;發現二分法的一個細節點&#xff0c;打算記錄下來&#xff0c;先看一張圖&#xff1a; 我們知道&#xff0c;排序數組&#xff0c;更高效的是二分查找法~~~而二分法就是切割中間&#xff0c;定義left是最開始的&…

Python 訓練營打卡 Day 40

訓練和測試的規范寫法 一、黑白圖片的規范寫法&#xff0c;以MNIST數據集為例 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms # 用于加載MNIST數據集 from torch.utils.data import DataLoader # 用于創建…

數據結構之棧:原理與常用方法

1. 棧的定義 Stack是Vector的一個子類&#xff0c;它實現標準的后進先出堆棧。Stack只定義了創建空堆棧的默認構造方法。&#xff08;實際上是實現了List接口&#xff0c;因為Vector是List的子類&#xff09;。 Stack() // 創建一個空棧 2. 棧的基本操作 // 壓棧操作 publi…

鴻蒙OSUniApp 開發支持圖片和視頻的多媒體展示組件#三方框架 #Uniapp

使用 UniApp 開發支持圖片和視頻的多媒體展示組件 前言 在現代移動應用中&#xff0c;圖片和視頻已成為內容展示的主流形式。一個優秀的多媒體展示組件不僅能提升用戶體驗&#xff0c;還能增強產品的互動性和視覺沖擊力。隨著鴻蒙&#xff08;HarmonyOS&#xff09;生態的不斷…

STM32CubeMX,arm-none-eabi-gcc簡單試用

在windows下&#xff0c;為stm32系列單片機編程&#xff0c;keil有了免費的試用版&#xff0c;有很多開發板示例&#xff0c;給學習單片機編程帶來很大的方便。 STM32CubeMX提供了stm32單片機的功能設置&#xff0c;在輸出方式上給出了幾種方式&#xff0c;有mdk&#xff08;k…

灌水論壇系統總體設計文檔

一、實驗題目 灌水論壇系統 二、實驗目的 旨在通過一個相對完整且功能豐富的Web應用實例&#xff0c;全面地實踐和鞏固Web開發所需的各項核心技術和工程方法&#xff0c;從而提升其綜合應用能力和解決實際開發問題的能力。它不僅僅是完成一個軟件&#xff0c;更是一個學習、…

Android 13中 配置簽名文件與內置相應的Apk

目錄 1.問題場景 2.實現思路 3.將測試代碼做成APK并配置簽名 4.將apk內置到系統當中的方法 1.問題場景 在展訊平臺中Android13的源碼已知的情況下&#xff0c;客戶寫了一個測試類用于調用系統中的一些接口來檢驗一些功能。為了方便調試排查問題我首先的思路是將客戶寫的測試…

HarmonyOS 5 應用開發導讀:從入門到實踐

一、HarmonyOS 5 概述 HarmonyOS 5 是華為推出的新一代分布式操作系統&#xff0c;其核心設計理念是"一次開發&#xff0c;多端部署"。與傳統的移動操作系統不同&#xff0c;HarmonyOS 5 提供了更強大的跨設備協同能力&#xff0c;支持手機、平板、智能穿戴、智慧屏…

C語言創意編程:用趣味實例玩轉基礎語法(4)

文章目錄 0. 前言1. &#x1f308; 彩虹文字生成器1.1 程序效果展示1.2 完整代碼解析1.3 關鍵技術詳解1.3.1 Windows控制臺API1.3.2 顏色編碼1.3.3 安全輸入1.3.4 跨平臺考慮 2. &#x1f3b5; 簡易音樂播放器2.1 程序效果展示2.2 完整代碼解析2.3 關鍵技術詳解2.3.1 Windows B…

【專題】神經網絡期末復習資料(題庫)

神經網絡期末復習資料&#xff08;題庫&#xff09; 鏈接&#xff1a;https://blog.csdn.net/Pqf18064375973/article/details/148332887?sharetypeblogdetail&sharerId148332887&sharereferPC&sharesourcePqf18064375973&sharefrommp_from_link 【測試】 Th…

Python訓練營打卡 Day41

簡單CNN 知識回顧 數據增強卷積神經網絡定義的寫法batch歸一化&#xff1a;調整一個批次的分布&#xff0c;常用與圖像數據特征圖&#xff1a;只有卷積操作輸出的才叫特征圖調度器&#xff1a;直接修改基礎學習率 卷積操作常見流程如下&#xff1a; 1. 輸入 → 卷積層 → Batch…

leetcode216.組合總和III:回溯算法中多條件約束下的狀態管理

一、題目深度解析與組合約束條件 題目描述 找出所有相加之和為n的k個數的組合&#xff0c;且滿足以下條件&#xff1a; 每個數只能使用一次&#xff08;范圍為1到9&#xff09;所有數字均為唯一的正整數組合中的數字按升序排列 例如&#xff0c;當k3&#xff0c;n9時&#…