2- 棧和隊列----之棧

--------------------------1)棧: stackhtml

棧:只能在表尾進行刪除和插入的操做,它是一種線性表。 所以,先進後出。數據結構

參考文檔:測試

 大話數據結構;ui

http://blog.chinaunix.net/uid-25908383-id-2965531.htmlspa

 

2)基本操做.net

  • 建立棧
  • 銷燬棧
  • 清空棧
  • 進棧
  • 出棧
  • 獲取棧頂元素
  • 獲取棧的大小

3) 代碼unix

  1 #define MAXSIZE 20
  2 
  3 //0. 棧的結構
  4 typedef struct  
  5 {
  6     int data[MAXSIZE];
  7     int top;
  8 } Seqstack;
  9 
 10 //1. 初始化棧
 11 Seqstack * initial_stack ()
 12 {
 13     Seqstack *s=NULL;
 14 
 15     s=(Seqstack*)malloc(sizeof(Seqstack));
 16     s->top=-1;
 17     return  s;
 18 }
 19 
 20 //2. 銷燬棧
 21 int detory_stack(Seqstack *s) 
 22 {
 23     if(s!=NULL)
 24     {
 25         free(s);
 26         s=NULL;
 27     }
 28     return 0;
 29 }
 30 
 31 // 3. 清空棧
 32 int clear_stack(Seqstack *s)
 33 {
 34     if(s != NULL)
 35     {
 36         s->top = -1;
 37         memset(s,0,MAXSIZE);
 38     } 
 39     return 0;
 40 }
 41 
 42 //4. 判斷棧是否爲空
 43 int isEmpty_stack(Seqstack *s)
 44 {
 45     return s->top==-1;
 46 }
 47 
 48 //5. 返回棧頂元素,(若棧存在且非空)
 49 int getTop_stack(Seqstack *s,int *e)
 50 {
 51     if(s->top==-1)
 52     {
 53         return -1;
 54     }
 55     else
 56         *e=s->data[s->top];
 57     return 0;
 58 }
 59 
 60 // 6. 進棧
 61 int push_stack(Seqstack *s,int *e)
 62 {
 63     if(s->top==MAXSIZE-1)//棧滿
 64     {
 65         return -1;
 66     }
 67     s->top++;
 68     s->data[s->top]=*e;
 69     return 0;
 70 }
 71 
 72 //7. 出棧
 73 int pop_stack(Seqstack *s,int &e)
 74 {
 75     if(s->top==-1)
 76     {
 77         return -1;
 78     }
 79     e=s->data[s->top];
 80     s->top--;
 81     return 0;
 82 }
 83 
 84 // 8. 棧的長度
 85 int length_stack(Seqstack *s)
 86 {
 87     int i=0;
 88     i=s->top+1;
 89     return i;
 90 }
 91 
 92 //9. 遍歷
 93 int print_stack(Seqstack *s)
 94 {
 95     int k=s->top;
 96     while(k!=-1)
 97     {
 98         printf("%5d",s->data[k]);
 99         (k)--;
100     }
101     return 0;
102         
103 }

4) 測試代碼code

 1 int main()
 2 {
 3     Seqstack *s1;
 4     int elem=0;
 5     int ret=0;
 6     int t1=1;
 7     int t2=2;
 8     int t3=3;
 9     int t4=4;
10     int t5=5;
11 
12     //1. int initial_stack (Seqstack *s)
13     s1=initial_stack();
14 
15     //2. 入棧int push_stack(Seqstack *s,int *e)
16     push_stack(s1,&t1);
17     push_stack(s1,&t2);
18     push_stack(s1,&t3);
19     push_stack(s1,&t4);
20     push_stack(s1,&t5);
21 
22     //3. 此時棧元素的個數int length_stack(Seqstack *s)
23     ret=length_stack(s1);
24     printf("棧元素的個數: %5d",ret);
25 
26     //4. 遍歷 int print_stack(Seqstack *s)
27     printf("\n棧中的元素\n");
28     ret=print_stack(s1);
29     ret=length_stack(s1);
30 
31     //5. 出棧int pop_stack(Seqstack *s,int *e)
32     printf("\n出棧:\n");
33     ret=pop_stack(s1,elem);
34     printf(" %5d",elem);
35     ret=pop_stack(s1,elem);
36     printf(" %5d",elem);
37     ret=pop_stack(s1,elem);
38     printf(" %5d",elem);
39     ret=pop_stack(s1,elem);
40     printf(" %5d",elem);
41     ret=pop_stack(s1,elem);
42     printf(" %5d",elem);
43     cout<<'\n';
44 
45     //6. 清空棧int clear_stack(Seqstack *s)
46     ret =clear_stack(s1);
47 
48     //7. 判斷棧是否爲空int isEmpty_stack(Seqstack *s)
49     ret=isEmpty_stack(s1);
50     printf("0表明棧爲空: %5d",ret);
51     cout<<'\n';
52 
53     // 8. 銷燬棧
54     ret= detory_stack(s1) ;
55     printf("0表明棧爲空: %5d",ret);
56     cout<<'\n';
57 
58     cout<<"hello";
59     system("pause");
60     return 0;
61 }

 

5) 運行結果htm

 

相關文章
相關標籤/搜索