1. 程式人生 > >資料結構->棧->順序棧ADT程式碼

資料結構->棧->順序棧ADT程式碼

順序棧基於陣列的資料結構,故在定義棧的資料結構中,關鍵是top(棧頂的變化過程),值得注意的一點是top的取值是-1,以及malloc的用法。

一下是基於C語言的程式碼,執行環境為VS2017。

  1 //順序棧
  2 #include<stdio.h>
  3 #include<malloc.h>
  4 #define stackSize 10
  5 
  6 //棧的資料結構(用陣列實現)
  7 typedef struct
  8 {
  9     int top;
 10     int size;
 11     int data[stackSize];
12 }stack,*sqStack; 13 14 //建立新棧 15 sqStack Create() 16 { 17 sqStack S=(stack *)malloc(stackSize * sizeof(stack)); 18 S->size = stackSize; 19 S->top = -1; 20 printf("成功建立一個長度為%d的棧\n",stackSize); 21 return S; 22 } 23 24 //判斷棧空滿並返回棧中元素個數 25 int IsFull(sqStack S) 26
{ 27 if (S->top == -1) 28 { 29 printf("棧已空\n"); 30 return false; 31 } 32 else 33 { 34 if (S->top == (S->size - 1)) 35 { 36 printf("棧已滿\n"); 37 return true; 38 } 39 else 40 { 41 printf("
棧中有%d個元素\n",S->top+1); 42 } 43 } 44 } 45 46 //入棧 47 int InStack(sqStack S,int P) 48 { 49 if (S->top == (S->size - 1)) 50 { 51 printf("棧已滿,出棧後再執行操作\n"); 52 } 53 else 54 { 55 printf("請輸入入棧元素"); 56 scanf_s("%d", &P); 57 S->top = S->top + 1; 58 S->data[S->top] = P; 59 printf("成功入棧,入棧元素為%d\n", S->data[S->top]); 60 return P; 61 } 62 }; 63 64 //出棧 65 int OutStack(sqStack S) 66 { 67 if (S->top == -1) 68 { 69 printf("棧已空,入棧後再執行操作\n"); 70 } 71 else 72 { 73 printf("出棧成功,出棧元素為%d\n", S->data[S->top--]); 74 } 75 return S->top + 1; 76 } 77 78 //檢視棧頂元素 79 int VistStack(sqStack S) 80 { 81 if (S->top == -1) 82 { 83 printf("棧已空,入棧後再執行操作\n"); 84 } 85 else 86 { 87 printf("棧頂元素為%d", S->data[S->top]); 88 return S->data[S->top]; 89 } 90 } 91 92 //列印棧 93 void Printstack(sqStack S) 94 { 95 int i = 0; 96 printf("棧底|"); 97 for (i = 0; i <= S->top; i++) 98 { 99 printf("%d ", S->data[i]); 100 } 101 printf("<-棧頂"); 102 } 103 104 //主函式 105 void main() 106 { 107 int i; 108 stack S; 109 sqStack Sq; 110 Sq = &S; //Sq的初始化 111 do 112 { 113 printf("\n------------****------------\n"); 114 printf("請輸入要執行的操作序號\n"); 115 printf("1.建立空棧\n"); 116 printf("2.入棧\n"); 117 printf("3.出棧\n"); 118 printf("4.檢視棧頂元素\n"); 119 printf("5.列印棧\n"); 120 printf("6.判斷棧空/滿\n"); 121 printf("0.退出"); 122 printf("\n------------****------------\n"); 123 printf("請輸入序號:"); 124 scanf_s("%d", &i); 125 printf("\n"); 126 switch (i) 127 { 128 case 1: Sq=Create(); break; 129 case 2:InStack(Sq,i); break;//i為任意的整數,為了節省空間故用i代替 130 case 3:OutStack(Sq); break; 131 case 4:VistStack(Sq);break; 132 case 5:Printstack(Sq); break; 133 case 6:IsFull(Sq); break; 134 case 0:printf("結束"); break; 135 default:printf("輸入錯誤!請輸入0---6的整數"); 136 137 } 138 } while (i != 0); 139 getchar(); 140 }