C语言 顺序栈的相关操作
一、栈的定义
堆栈简称栈,是限定仅在表的一端进行插入和删除操作的线性表。通常将进行插入和删除的一端叫做栈顶(top),不允许
插入和删除的一端叫做栈底(bottom),不含任何元素的栈叫做空栈。
由于堆栈元素的插入和删除操作只是在栈顶进行,总是后进去的元素先出来,所以堆栈又称为后进先出线性表。
理解栈的定义需要注意:它是一种线性表,即具有线性关系,前趋后继关系。
重点:通常情况下我们把空栈的判断条件定位为top=-1,当栈中有一个元素时top=0,而栈满时top=MAXSIZE-1
二、栈的顺序存储结构
栈的顺序存储也成顺序表,类似于顺序表,用一维数组来存放栈中元素,栈底一般固定设在下标为0的一端,用一个变量top
指示当前栈顶元素所在单元的位置。
栈的顺序存储的结构定义:
typedef struct{ int data[MAXSIZE]; int top; }SeqStack;
(1)初始化栈:
1 //初始化栈 2 void initStack(SeqStack *s){ 3 s->top=-1; 4 }
(2)判断栈是否为空:
1 bool stackempty(SeqStack *s){ 2 if(s->top==-1){ 3 printf("栈是空栈\n"); 4 return true; 5 }else{ 6 printf("栈不是空栈\n"); 7 return false; 8 } 9 }
(3)获取栈顶元素:
1 bool Gettop(SeqStack *s,int *e){ 2 if(s->top==-1){ 3 printf("栈是空栈\n"); 4 return true; 5 }else{ 6 *e=s->data[s->top]; 7 return false; 8 } 9 }
(4)遍历顺序栈:
1 1 //遍历顺序栈 2 2 void DispStack(SeqStack *s){ 3 3 int i=s->top; 4 4 while(i!=-1){ 5 5 printf("%d ",s->data[i]); 6 6 i--; 7 7 } 8 8 printf("\n"); 9 9 }
(5)进栈与出栈:
1 //进栈 2 bool pushStack(SeqStack *s,int e){ 3 if(s->top==MAXSIZE-1){ 4 printf("栈是满栈\n"); 5 return true; 6 }else{ 7 s->top++; 8 s->data[s->top]=e; 9 return false; 10 } 11 } 12 //出栈 13 bool popStack(SeqStack *s,int *e){ 14 if(s->top<=-1){ 15 printf("栈是空栈\n"); 16 return false; 17 }else{ 18 *e=s->data[s->top]; 19 s->top--; 20 return true; 21 } 22 }
总代码:
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <stdbool.h> 4 #include <time.h> 5 #define MAXSIZE 100 6 typedef int Elemtype; 7 typedef struct{ 8 int data[MAXSIZE]; 9 int top; 10 }SeqStack; 11 //初始化栈 12 void initStack(SeqStack *s){ 13 s->top=-1; 14 } 15 //判断栈是否为空 16 bool stackempty(SeqStack *s){ 17 if(s->top==-1){ 18 printf("栈是空栈\n"); 19 return true; 20 }else{ 21 printf("栈不是空栈\n"); 22 return false; 23 } 24 } 25 //获取栈顶元素 26 bool Gettop(SeqStack *s,int *e){ 27 if(s->top==-1){ 28 printf("栈是空栈\n"); 29 return true; 30 }else{ 31 *e=s->data[s->top]; 32 return false; 33 } 34 } 35 //遍历顺序栈 36 void DispStack(SeqStack *s){ 37 int i=s->top; 38 while(i!=-1){ 39 printf("%d ",s->data[i]); 40 i--; 41 } 42 printf("\n"); 43 } 44 45 //进栈 46 bool pushStack(SeqStack *s,int e){ 47 if(s->top==MAXSIZE-1){ 48 printf("栈是满栈\n"); 49 return true; 50 }else{ 51 s->top++; 52 s->data[s->top]=e; 53 return false; 54 } 55 } 56 //出栈 57 bool popStack(SeqStack *s,int *e){ 58 if(s->top<=-1){ 59 printf("栈是空栈\n"); 60 return false; 61 }else{ 62 *e=s->data[s->top]; 63 s->top--; 64 return true; 65 } 66 } 67 int main(){ 68 SeqStack *s; 69 s=(SeqStack *)malloc(sizeof(SeqStack)); 70 int num; 71 Elemtype e; 72 printf("顺序栈的相关操作:\n"); 73 printf("(1)依次进栈:1 2 3 4 \n"); 74 initStack(s); 75 pushStack(s,1); 76 pushStack(s,2); 77 pushStack(s,3); 78 pushStack(s,4); 79 printf("(2)从栈顶遍历栈:"); 80 DispStack(s); 81 printf("(3)判断栈是否为空:"); 82 stackempty(s); 83 printf("(4)获取栈顶元素:"); 84 Gettop(s,&num); 85 printf("%d\n",num); 86 printf("(5)出栈栈顶元素:"); 87 popStack(s,&num); 88 printf("%d\n",num); 89 printf("(6)获取栈顶元素:"); 90 Gettop(s,&num); 91 printf("%d\n",num); 92 printf("(7)出栈所有元素:"); 93 popStack(s,&num); 94 printf("出栈%d ",num); 95 popStack(s,&num); 96 printf("出栈%d ",num); 97 popStack(s,&num); 98 printf("出栈%d ",num); 99 popStack(s,&num); 100 printf("(8)获取栈顶元素:"); 101 popStack(s,&num); 102 printf("(9)判断栈是否为空:"); 103 stackempty(s); 104 return 0; 105 }
运行结果:

最近在学数据结构,欢迎交流学习!!

浙公网安备 33010602011771号