1.栈的链式存储
#include<iostream>
using namespace std;
typedef struct Node
{
int data;
struct Node *next;
}LiStack;
void InitStack(LiStack *&L)
{
L = (LiStack *)malloc(sizeof(LiStack));
L->next = NULL;
}
void Push(LiStack *&L,int e)
{
LiStack *r = (LiStack *)malloc(sizeof(LiStack));
r->data = e;
r->next = L->next;
L->next = r;
}
void Pop(LiStack *&L)
{
LiStack *p;
while(L->next != NULL)
{
p = L->next;
cout<<p->data;
L->next = p->next;
free(p);
}
}
int main()
{
LiStack *L;
int a[5] = {1,2,3,4,5};
InitStack(L);
for(int i=0;i<5;i++)
Push(L,a[i]);
Pop(L);
return 0;
}
2.栈的顺序存储
#include <iostream>
#include <stdlib.h>
#define Maxsize 1000
using namespace std;
typedef struct
{
char data[Maxsize];
int top;
}Stack;
void InitStack(Stack *&s)
{
s = (Stack *)malloc(sizeof(Stack));
s->top = -1;
}
bool Push(Stack *&s,char e)
{
if(s->top==Maxsize-1)
return false;
else
{
s->top++;
s->data[s->top] = e;
return true;
}
}
bool Pop(Stack *&s,char &e)
{
if(s->top == -1)
return false;
else
{
e = s->data[s->top];
s->top--;
return true;
}
}
bool symmetry(char str[])//判断字符左右对称
{
Stack *s;
char e;
InitStack(s);
for(int i=0;str[i]!='\0';i++)
Push(s, str[i]);
for(int i=0;str[i]!='\0';i++)
{
Pop(s,e);
if(e != str[i] )
{
free(s);
return false;
}
}
free(s);
return true;
}
int main() {
char str[5];
cin>>str;
cout<<symmetry(str);
return 0;
}