顺序栈的基本操作
#include
#include
#include
#define MaxSize 10
typedef struct{
int data[MaxSize];
int top;
}SqStack;
void InitStack(SqStack &S){
S.top = -1;
}
bool StackEmpty(SqStack S){
if(S.top==-1) return true;
else return false;
}
bool Push(SqStack &S,int x){
if(S.top==MaxSize-1) return false;
S.top = S.top+1;
S.data[S.top]=x;
return true;
}
int Pop(SqStack &S){
if(S.top==-1) return false;
int x;
x = S.data[S.top];
S.top = S.top-1;
return x;
}
int GetTop(SqStack &S){
if(S.top==-1) return false;
int x;
x=S.data[S.top];
return x;
}
bool PrintStack(SqStack &D){
if(D.top==-1){
printf("空栈");
return false;
}
for(int i=D.top;i>=0;i--)
printf("%d ",D.data[i]);
printf("\n");
return true;
}
int main(){
SqStack S;
InitStack(S);
printf("-----进栈-----\n");
Push(S,1);
Push(S,2);
Push(S,3);
Push(S,4);
printf("栈内元素:");
PrintStack(S);
printf("栈顶元素:");
int x;
x = GetTop(S);
printf("%d\n",x);
printf("-----出栈-----\n");
int y;
y=Pop(S);
printf("%d已经出栈\n",y);
printf("栈内元素:");
PrintStack(S);
y=Pop(S);
printf("%d已经出栈\n",y);
printf("栈内元素:");
PrintStack(S);
y=Pop(S);
printf("%d已经出栈\n",y);
printf("栈内元素:");
PrintStack(S);
printf("栈顶元素:");
int z;
z = GetTop(S);
printf("%d\n",z);
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
链栈的基本操作
#include
#include
#include
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkStack;
LinkStack InitStack(LinkStack &D){
D = (LNode *)malloc(sizeof(LNode));
D->next=NULL;
return D;
}
void PrintStack(LNode *p)
{
LNode *temp;
temp = p->next;
printf("打印栈:");
while(temp!=NULL)
{
printf("%d ",temp->data);
temp = temp->next;
}
printf("\n");
}
LinkStack Push(LinkStack &D,int x){
LNode *Q;
Q = (LNode *)malloc(sizeof(LNode));
Q->next = D->next;
D->next = Q;
Q->data = x;
return D;
}
int Pop(LinkStack &D){
if(D->next==NULL) return false;
LNode *Q;
Q = (LNode *)malloc(sizeof(LNode));
int x;
Q = D->next;
D->next = Q->next;
x = Q->data;
free(Q);
return x;
}
int GetTop(LinkStack &D){
if(D->next==NULL) return false;
int x;
x = D->next->data;
return x;
}
int main(){
LNode *D;
InitStack(D);
printf("-----开始进栈-----\n");
Push(D,1);
Push(D,2);
Push(D,3);
Push(D,4);
Push(D,5);
PrintStack(D);
printf("-----栈顶元素-----\n");
int z;
z=GetTop(D);
printf("栈顶元素为%d\n",z);
printf("-----开始出栈-----\n");
int x;
x = Pop(D);
printf("%d已经出栈\n",x);
PrintStack(D);
x = Pop(D);
printf("%d已经出栈\n",x);
PrintStack(D);
printf("-----栈顶元素-----\n");
int y;
y=GetTop(D);
printf("栈顶元素为%d\n",y);
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87