資料結構:順序棧的建立、初始化、入棧、出棧、輸出(C語言)
阿新 • • 發佈:2020-12-09
大一學C語言的時候還沒覺得有啥難的,直到現在學了資料結構。。。
還是自己技術不過關,理解不到位,還需要努力。。。
下面貼關於順序棧的程式碼:
#include<stdio.h> #include<stdlib.h> //儲存結構定義 #define STACK_INIT_SIZE 100//儲存空間初始分配量 #define STACKINCREATEMENT 10//儲存空間分配增量 #define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef int status; typedef struct{ int *base; int *top; int stacksize; }sqstack; //初始化 status initstack(sqstack &s) { s.base=(int *)malloc(STACK_INIT_SIZE*sizeof(int)); if(!s.base) exit(OVERFLOW); s.top=s.base; s.stacksize=STACK_INIT_SIZE; return OK; } //入棧 status push(sqstack &s,int e){ if(s.top-s.base>=s.stacksize)//棧滿 { s.base=(int *)realloc(s.base,(s.stacksize+STACKINCREATEMENT)*sizeof(int));//增加儲存空間 if(!s.base) exit(OVERFLOW); s.top=s.base+s.stacksize; s.stacksize = s.stacksize + STACKINCREATEMENT; } *s.top=e; *s.top++; return OK; } //出棧 status pop(sqstack &s,int &e){ //&e?? if(s.base==s.top)//棧空 return ERROR; e=*(s.top-1); //刪除棧頂元素,指標top減一 *s.top--; return OK; } //獲取棧頂元素 status gettop(sqstack &s,int &e){ if(s.base==s.top) return ERROR; e=*(s.top-1); return OK; } //輸出棧中元素 status printstack(sqstack &s){ if(s.base==s.top){ printf("空棧\n"); return ERROR; } else printf("棧的內容為:"); for(;s.base!=s.top;s.base++){ //for(;s.base!=s.top;s.top--) printf("%d ",*s.base);} //printf("%d ",*(s.top-1)); return OK; } int main(){ sqstack s; int x;//輸入的數字 if(initstack(s)) printf("初始化成功 !"); while(1){ printf("請輸入要進行的操作:\n"); printf("1.進棧\n 2.出棧\n 3.獲取棧頂元素\n 4.列印\n 0.退出\n"); scanf("%d",&x); if(x==0) break; switch(x) { case 0:break; case 1: int pushnumber; printf("請輸入要進棧的元素:"); scanf("%d",&pushnumber); if(push(s,pushnumber)) printf("進棧成功\n"); else printf("進棧失敗\n"); break; case 2: int e; if(pop(s,e)) printf("元素%d出棧\n",e); else printf("出棧失敗\n"); break; case 3: if(gettop(s,e)) printf("棧頂元素是 : %d\n",e); else printf("獲得棧頂元素失敗\n"); break; case 4: if(printstack(s)) printf("列印完畢\n"); break; default: printf("您進行了誤操作,請重試!\n"); break; } } return 1; }
個人認為需要注意的方面有:
1.malloc函式、realloc函式、sizeof函式 需要搞明白
2.結構體的定義與具體語法
3.指標方面 我個人對於這方面還是不太明白,希望有大佬能指點一下
4.順序棧的定義
執行結果:
希望大佬們提供寶貴的意見