棧的順序存儲結構及應用(C、Java代碼)
阿新 • • 發佈:2019-01-22
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 #defineView CodeMAXSIZE 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 }
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代碼)