1. 程式人生 > >棧的順序存儲結構及應用(C、Java代碼)

棧的順序存儲結構及應用(C、Java代碼)

sts info 技術 click 允許 n) clas show 先進後出

棧的定義:

棧(stack)是限定僅在表尾進行插入和刪除的線性表。

我們把允許插入和刪除的一端稱為棧頂(top),另一端稱為棧底(bottom) ,不包含任何數據元素的棧稱為空棧,棧又稱為先進後出的線性表,簡稱LIFO結構。

棧的插入操作:叫做進棧,或壓棧、入棧。

棧的刪除操作:叫做,出棧,或者彈棧。

棧的結構定義

1 /*棧的結構定義*/
2 typedef int sElemType;  //sElemType類型定義為int
3 typedef struct {
4 
5     sElemType data[MAXSIZE];
6     int top;   /*用於棧頂指針
*/ 7 8 }SqStack;

技術分享圖片

入棧操作

技術分享圖片

主要代碼:

1 /*入棧操作,將元素e入棧*/
2 int PushStack(SqStack* s,sElemType e){
3     //判斷入棧的合理性
4     if(s->top == MAXSIZE-1)
5         return 0;
6     s->top++;
7     s->data[s->top]=e;
8     return 1;
9 }

出棧操作

主要代碼:

 1 /*出棧操作,並用e返回棧頂元素的值*/
 2 int PopStack(SqStack* s){
3 4 sElemType e; 5 if((s->top)<0) /*空棧*/ 6 return 0; 7 e=s->data[s->top]; 8 s->top--; 9 return e; 10 }

用棧之前確記要記得初始化一下

/*棧的初始化*/
void InitStack(SqStack* s){

    s->top =0;
}

實現代碼

技術分享圖片
 1 #include <stdio.h>
 2 
 3 #define
MAXSIZE 20 4 /*棧的結構定義*/ 5 typedef int sElemType; //sElemType類型定義為int 6 7 typedef struct { 8 9 sElemType data[MAXSIZE]; 10 int top; /*用於棧頂指針*/ 11 12 }SqStack; 13 14 /*棧的初始化*/ 15 void InitStack(SqStack* s){ 16 17 s->top =0; 18 } 19 20 /*入棧操作,將元素e入棧*/ 21 int PushStack(SqStack* s,sElemType e){ 22 //判斷入棧的合理性 23 if(s->top == MAXSIZE-1) 24 return 0; 25 s->top++; 26 s->data[s->top]=e; 27 return 1; 28 } 29 30 /*出棧操作,並用e返回棧頂元素的值*/ 31 int PopStack(SqStack* s){ 32 33 sElemType e; 34 if((s->top)<0) /*空棧*/ 35 return 0; 36 37 e=s->data[s->top]; 38 s->top--; 39 return e; 40 } 41 42 int main(){ 43 SqStack stack; 44 InitStack(&stack); 45 PushStack(&stack,100); 46 int pop=PopStack(&stack); 47 printf("出棧數據:%d\n",pop); 48 49 return 0; 50 }
View Code

技術分享圖片

Java代碼實現

技術分享圖片
 1 package stackdemo;
 2 
 3 public class SqeStack {
 4 
 5     int top; // 棧頂指針
 6     int data[] = new int[20];
 7 
 8     /**
 9      * 棧的初始化
10      */
11     public void InitStack(SqeStack s) {
12         s.top = 0;
13     }
14 
15     /**
16      * 進棧操作,n進棧數據
17      */
18     int PushStack(SqeStack s, int n) {
19 
20         if (s.top == 19)
21             return 0;
22 
23         s.top++;
24         s.data[s.top] = n;
25         return 1;
26     }
27 
28     /**
29      * 出棧操作
30      */
31     int PopStack(SqeStack s) {
32         int e;
33 
34         if (s.top == 0)
35             return 0;
36         e = s.data[s.top];
37         s.top--;
38         return e;
39     }
40 
41 }
View Code 技術分享圖片
 1 package stackdemo;
 2 
 3 public class TestStack {
 4 
 5     public static void main(String[] args) {
 6         // TODO Auto-generated method stub
 7 
 8         SqeStack s = new SqeStack();
 9         s.InitStack(s);
10         s.PushStack(s, 10);
11         int pop = s.PopStack(s);
12         System.out.println("出棧數據: " + pop);
13     }
14 }
View Code

完畢 - -

棧的順序存儲結構及應用(C、Java代碼)