2- 栈和队列----之栈
--------------------------1)栈: stack
栈:只能在表尾进行删除和插入的操作,它是一种线性表。 因此,先进后出。
参考文档:
大话数据结构;
http://blog.chinaunix.net/uid-25908383-id-2965531.html
2)基本操作
- 创建栈
- 销毁栈
- 清空栈
- 进栈
- 出栈
- 获取栈顶元素
- 获取栈的大小
3) 代码
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) 测试代码
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) 运行结果