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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【数据结构-栈】C语言实现顺序栈基本操作

發布時間:2023/12/9 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【数据结构-栈】C语言实现顺序栈基本操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C語言實現順序棧基本操作

  • 基本操作
      • 順序棧儲存結構
      • 初始化順序棧
      • 判斷順序棧是否為空
      • 順序棧的長度
      • 清空順序棧
      • 銷毀順序棧
      • 壓棧n個元素
      • 入棧
      • 出棧
      • 遍歷
      • 測試代碼整合

基本操作

順序棧儲存結構

//定義順序棧存儲結構 typedef struct {int *top; //棧頂指針 int *base; //棧底指針 int stacksize; //順序棧最大容量 } SqStack;

初始化順序棧

//初始化順序棧 Status InitStack(SqStack *s) {(*s).base = (SElemType *)malloc(MAXSIZE); //動態創建一個內存空間單元,容量為MAXSIZE if(!(*s).base) return ERROR; //動態創建空間單元失敗返回ERROR (*s).top = (*s).base; //棧頂指針指向棧底指針 (*s).stacksize = MAXSIZE; return OK; }

判斷順序棧是否為空

//判斷順序棧是否為空 Status isEmpty(SqStack s) {if(s.base == s.top) return TRUE; //棧頂和棧底相同 空 return FALSE; //非空 }

順序棧的長度

//求順序棧長度 int StackLength(SqStack s) {return s.top-s.base; //棧頂指針減去棧底指針 }

清空順序棧

//清空順序棧 Status clearStack(SqStack *s) {if((*s).base == NULL) return ERROR; //順序棧不存在返回ERROR (*s).top = (*s).base; //棧頂指針指向棧底 return OK; }

銷毀順序棧

//銷毀順序棧 Status destroyStack(SqStack *s) {if((*s).base == NULL) return ERROR;free((*s).base); //釋放棧底指針所指向的內存單元 (*s).stacksize = 0; //順序棧最大容量設置為0 (*s).base = (*s).top = NULL; //棧底和棧頂都設置NULL return OK; }

壓棧n個元素

//為順序棧 壓棧n個元素 Status pushElems(SqStack *s,int n) {int i;if((*s).base == NULL) return ERROR; //順序棧不存在返回ERROR if(((*s).top - (*s).base) == (*s).stacksize) return ERROR; //順序棧滿棧返回ERROR printf("請輸入壓棧的%d個元素: ",n);for(i=0;i<n;i++){scanf("%d",(*s).top); //棧頂指針指向的內存單元輸入數據 (*s).top++; //棧頂指針指向下一個棧 }return OK; }

入棧

//入棧 Status push(SqStack *s,SElemType e) {if((*s).base == (*s).MAXSIZE) return ERROR; *((*s).top)++=e; //棧頂指針先賦值自加 return OK;}

出棧

//出棧 Status pop(SqStack *s,SElemType *e) {if((*s).base == (*s).top) return ERROR;*e = *-- (*s).top; //棧頂指針先自減再取值,最后賦值 return OK; }

遍歷

//遍歷 void show(SqStack s) {printf("當前順序棧情況: ");for(s.top = s.top-1;s.top>=s.base;s.top--)printf("%d ",*(s.top));printf("\n"); }

測試代碼整合

#include <stdio.h> #include <stdlib.h>#define OK 1 #define ERROR 0 #define OVERFLOW -2 #define TRUE 1 #define FALSE 0 #define MAXSIZE 100typedef int SElemType; typedef int Status; //定義順序棧存儲結構 typedef struct {int *top; //棧頂指針 int *base; //棧底指針 int stacksize; //順序棧最大容量 } SqStack;//初始化順序棧 Status InitStack(SqStack *s) {(*s).base = (SElemType *)malloc(MAXSIZE); //動態創建一個內存空間單元,容量為MAXSIZE if(!(*s).base) return ERROR; //動態創建空間單元失敗返回ERROR (*s).top = (*s).base; //棧頂指針指向棧底指針 (*s).stacksize = MAXSIZE; return OK; }//為順序棧 壓棧n個元素 Status pushElems(SqStack *s,int n) {int i;if((*s).base == NULL) return ERROR; //順序棧不存在返回ERROR if(((*s).top - (*s).base) == (*s).stacksize) return ERROR; //順序棧滿棧返回ERROR printf("請輸入壓棧的%d個元素: ",n);for(i=0;i<n;i++){scanf("%d",(*s).top); //棧頂指針指向的內存單元輸入數據 (*s).top++; //棧頂指針指向下一個棧 }return OK; } //判斷順序棧是否為空 Status isEmpty(SqStack s) {if(s.base == s.top) return TRUE; //棧頂和棧底相同 空 return FALSE; //非空 }//清空順序棧 Status clearStack(SqStack *s) {if((*s).base == NULL) return ERROR; //順序棧不存在返回ERROR (*s).top = (*s).base; //棧頂指針指向棧底 return OK; } //銷毀順序棧 Status destroyStack(SqStack *s) {if((*s).base == NULL) return ERROR;free((*s).base); //釋放棧底指針所指向的內存單元 (*s).stacksize = 0; //順序棧最大容量設置為0 (*s).base = (*s).top = NULL; //棧底和棧頂都設置NULL return OK; }//求順序棧長度 int StackLength(SqStack s) {return s.top-s.base; //棧頂指針減去棧底指針 }//入棧 Status push(SqStack *s,SElemType e) {if((*s).base == (*s).MAXSIZE) return ERROR; *((*s).top)++=e; //棧頂指針先賦值自加 return OK;} //出棧 Status pop(SqStack *s,SElemType *e) {if((*s).base == (*s).top) return ERROR;*e = *-- (*s).top; //棧頂指針先自減再取值,最后賦值 return OK; }//遍歷 void show(SqStack s) {printf("當前順序棧情況: ");for(s.top = s.top-1;s.top>=s.base;s.top--)printf("%d ",*(s.top));printf("\n"); } int main() {SqStack S;SElemType e;InitStack(&S);printf("-------為初始化的棧壓入數據-------\n"); pushElems(&S,5);show(S);printf("\n-------順序棧是否為空?---------\n");if(isEmpty(S)) printf("空棧\n");else printf("非空棧\n"); printf("\n-------順序棧的長度--------\n順序棧的長度:%d\n",StackLength(S));printf("\n-------順序棧入棧-----------\n");push(&S,10); show(S);printf("\n-------順序棧出棧-----------\n");pop(&S,&e);printf("出棧元素:%d\n",e);show(S);printf("\n-------清空順序棧----------\n");clearStack(&S); if(isEmpty(S)) printf("空棧\n");else printf("非空棧\n"); printf("\n-------銷毀順序棧----------\n");destroyStack(&S);if(!S.base) printf("棧不存在~\n"); }

總結

以上是生活随笔為你收集整理的【数据结构-栈】C语言实现顺序栈基本操作的全部內容,希望文章能夠幫你解決所遇到的問題。

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