【数据结构-栈】C语言实现顺序栈基本操作
生活随笔
收集整理的這篇文章主要介紹了
【数据结构-栈】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语言实现顺序栈基本操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VSAN见证虚拟设备
- 下一篇: struct作为map的key时,需要重