C語言模擬順序棧的建立、入棧、出棧操作
阿新 • • 發佈:2019-02-04
#include<stdio.h> #include<stdlib.h> #define true 1 #define false 0 #define ok 1 #define error 0 #define infeasible 1 #define overflow 0 typedef struct{ int *base; int *top; int stacksize; }sqstack; //函式說明 createstack(sqstack *s); stackpush(sqstack *s); show(sqstack *s); stackpop(sqstack *s); main() { int j; sqstack s; createstack(&s); do { printf(" ╔-----------------------------------------------╗\n"); //顯示一個簡易選單 printf(" ┆ main menu ┆\n"); printf(" ┆ 1 --- 建立(Insert) ┆\n"); printf(" ┆ 2 --- 入棧(Update) ┆\n"); printf(" ┆ 3 --- 出棧(Delete) ┆\n"); printf(" ┆ 4 --- 退出( Show ) ┆\n"); printf(" ╚-----------------------------------------------╝\n"); printf("請輸入所要進行的操作序號: "); scanf("%d",&j); //接受使用者的選擇 switch(j) //接受使用者的函式 {case 1:{createstack(&s);printf("建立成功!\n"); break;} case 2:{stackpush(&s);show(&s); break;} case 3:{stackpop(&s);show(&s); break;} case 4:break; default:printf("錯誤選擇!請重選\n");break; } }while(j!=4); //直到i被賦值為4 return 0; } //構造一個空棧 createstack(sqstack *s) { s->base=(int *)malloc(50*sizeof(int)); //開始分配50個整形空間 if(!s->base) exit(overflow); s->top=s->base; s->stacksize=50; return ok; } //插入新元素為棧頂元素 stackpush(sqstack *s) { int e; if(s->top - s->base>=50){//棧滿 ,追加儲存空間 s->base = (int *)realloc(s->base,(50+10)*sizeof(int)); if(!s->base) exit(overflow);//儲存分配失敗 s->top = s->base + 50;//新擴充空間後的棧頂指標位置 s->stacksize += 10; } printf("請輸入要入棧的值:"); scanf("%d",&e); *s->top++ = e; return ok; } //出棧 stackpop(sqstack *s) { if(s->base == s->top) {printf("棧為空!不能出棧!"); return error;} --s->top; return ok; } //列印棧 show(sqstack *s) { int *ww; printf("The stack is :"); ww=s->base; while(ww!=s->top){ printf(" %d ",*ww++); } printf("\n"); }