日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

栈的动态顺序存储和实现(C语言)【栈】(7)

發布時間:2025/3/20 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 栈的动态顺序存储和实现(C语言)【栈】(7) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  • ElemType.h
  • SqStack.h
  • ElemType.cpp
  • SqStack.cpp
  • main.cpp
  • 測試結果

ElemType.h

#pragma once//ElemType 的定義 typedef int ElemType;int compare(ElemType x, ElemType y); void visit(ElemType e);

SqStack.h

#pragma once #include "ElemType.h"//棧結構的定義typedef struct _Stack {ElemType* base; //棧基地址ElemType* top; //棧頂int stacksize; //棧空間的尺寸 }SqStack, *SqStackPtr;//棧的基本操作 void InitStack(SqStackPtr Stack); //初始化 void DestroyStack(SqStackPtr Stack); //銷毀 void ClearDtack(SqStackPtr Stack); //清空 bool IsStackEmpty(SqStack Stack); //判空 int StackLength(SqStack Stack); //求長度 bool GetTop(SqStack Stack, ElemType* e); //獲得棧頂元素 void StackTraverse(SqStack Stack,void(*fp)(ElemType)); //遍歷棧中的數據元素 bool Push(SqStackPtr Stack, ElemType e); //壓棧 bool Pop(SqStackPtr Stack, ElemType* e); //出棧

ElemType.cpp

#include "ElemType.h" #include <stdio.h>//ElemType 的實現int compare(ElemType x, ElemType y) {return (x - y); } void visit(ElemType e) {printf("%d\t", e); }

SqStack.cpp

#include "ElemType.h" #include "SqStack.h" #include <stdio.h> #include <assert.h> #include <malloc.h> #include <stdlib.h> const int STACK_INIT_SIZE = 100; //初始分派的長度 const int STACK_ADD_SIZE = 20; //占內存空間的增量/* ------------------------------------------------------------ 操作目的: 初始化棧 初始條件: 無 操作結果: 構造一個空棧 函數參數: SqStackPtr Stack 待初始化的棧 返回值: bool 操作是否成功 ------------------------------------------------------------*/void InitStack(SqStackPtr Stack) {assert(Stack != NULL);if (NULL == Stack){printf("%d-->%s error", __LINE__, __FILE__);exit(-1);}Stack->base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType));if (!Stack->base){printf("InitStack Apply Fail\n");exit(-1);}Stack->top = Stack->base;Stack->stacksize = STACK_INIT_SIZE; }/* ------------------------------------------------------------ 操作目的: 銷毀棧 初始條件: 棧Stack已經存在 操作結果: 銷毀棧Stack 函數參數: SqStackPtr Stack 待銷毀的棧 返回值:無 ------------------------------------------------------------*/ void DestroyStack(SqStackPtr Stack) {assert(Stack != NULL);if (NULL == Stack){printf("%d-->%s error", __LINE__, __FILE__);exit(-1);}free(Stack->base);Stack->base = Stack->top = NULL; }/* ------------------------------------------------------------ 操作目的: 清空棧 初始條件: 棧Stack已經存在 操作結果: 清空棧Stack 函數參數: SqStackPtr Stack 待清空的棧 返回值:無 ------------------------------------------------------------*/ void ClearDtack(SqStackPtr Stack) {assert(Stack != NULL);if (NULL == Stack){printf("%d-->%s error", __LINE__, __FILE__);exit(-1);}Stack->top = Stack->base; }/* ------------------------------------------------------------ 操作目的: 判斷棧是否為空 初始條件: 棧Stack已經存在 操作結果: 若棧Stack為空,則返回true,否則返回false 函數參數:SqStackPtr Stack 待判斷的棧 返回值:bool 是否為空 ------------------------------------------------------------*/bool IsStackEmpty(SqStack Stack) {return Stack.top == Stack.base ? true : false; }/* ------------------------------------------------------------ 操作目的: 得到棧長度 初始條件: 棧Stack已經存在 操作結果: 返回棧Stack中數據元素的個數 函數參數:SqStackPtr Stack 需要求長度的棧 返回值:int 棧中數據元素的個數 ------------------------------------------------------------*/int StackLength(SqStack Stack) {return Stack.top - Stack.base; }/* ------------------------------------------------------------ 操作目的: 得到棧頂元素 初始條件: 棧Stack已經存在 操作結果: 用 e 返回棧頂元素 函數參數:SqStackPtr Stack 棧StackElemType* e 棧頂元素 返回值:bool 操作是否成功 ------------------------------------------------------------*/ bool GetTop(SqStack Stack, ElemType* e) {if (Stack.base == Stack.top)return false;else{*e = *(Stack.top - 1);}return true; }/* ------------------------------------------------------------ 操作目的: 遍歷棧 初始條件: 棧Stack已經存在 操作結果: 以此對于棧Stack的每一個元素調用函數fp 函數參數:SqStackPtr Stack 棧Stackvoid(*fp)(ElemType) 訪問每一個數據元素的函數指針 返回值:bool 操作是否成功 ------------------------------------------------------------*/void StackTraverse(SqStack Stack, void(*fp)(ElemType)) {while (Stack.base < Stack.top){(*fp)(*Stack.base);Stack.base++;}printf("\n"); }/* ------------------------------------------------------------ 操作目的: 壓棧 初始條件: 棧Stack已經存在 操作結果: 以此對于棧Stack的每一個元素調用函數fp 函數參數:SqStackPtr Stack 棧StackElemType e 待插入的數據元素 返回值:bool 操作是否成功 ------------------------------------------------------------*/bool Push(SqStackPtr Stack, ElemType e) {assert(Stack != NULL);if (NULL == Stack){printf("%d-->%s error", __LINE__, __FILE__);exit(-1);}if ((Stack->top - Stack->base) == Stack->stacksize){Stack->base = (ElemType*)realloc(Stack->base, (Stack->stacksize + STACK_ADD_SIZE) * sizeof(ElemType));if (!Stack->base){return false;}Stack->top = Stack->base + Stack->stacksize;Stack->stacksize += STACK_ADD_SIZE;}*(Stack->top++) = e;return true; }/* ------------------------------------------------------------ 操作目的: 出棧 初始條件: 棧Stack已經且為非空 操作結果: 刪除棧頂元素,并用e返回元素值 函數參數:SqStackPtr Stack 棧StackElemType e 被刪除的數據元素 返回值:bool 操作是否成功 ------------------------------------------------------------*/bool Pop(SqStackPtr Stack, ElemType* e) {assert(Stack != NULL);if (NULL == Stack){printf("%d-->%s error", __LINE__, __FILE__);exit(-1);}if (Stack->top == Stack->base)return false;*e = *(--Stack->top);return true; }

main.cpp

#include<stdio.h> #include "SqStack.h" int main() {SqStack s;InitStack(&s);if (IsStackEmpty(s))printf("棧為空\n");elseprintf("棧不為空\n");printf("壓棧:\n");for (int i = 0; i < 10; i++){Push(&s, i * 11);}printf("棧中所有數據元素為:\n");StackTraverse(s, visit);ElemType tmp = 0;GetTop(s, &tmp);printf("棧頂元素為%d\n", tmp);Pop(&s, &tmp);printf("出棧元素為%d\n", tmp);printf("棧長度為%d\n", StackLength(s));Pop(&s, &tmp);printf("出棧元素為%d\n", tmp);printf("棧長度為%d\n", StackLength(s));Pop(&s, &tmp);printf("出棧元素為%d\n", tmp);printf("棧長度為%d\n", StackLength(s));printf("棧中所有數據元素為:\n");StackTraverse(s, visit);if (IsStackEmpty(s))printf("棧為空\n");elseprintf("棧不為空\n");printf("清空棧\n");ClearDtack(&s);if (IsStackEmpty(s))printf("棧為空\n");elseprintf("棧不為空\n");DestroyStack(&s);return 0; }

測試結果

總結

以上是生活随笔為你收集整理的栈的动态顺序存储和实现(C语言)【栈】(7)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。