以下是一些关于链栈基本操作的代码
#include<stdio.h>
#include<stdlib.h>
#define maxSize 100
typedef struct LinkStNode
{
char data;
LinkStNode * next;
}LinkStNode;
void InitStack(LinkStNode * &s)
{
s = (LinkStNode*)malloc(sizeof(LinkStNode));
s->next = NULL;
}
void DestroyStack(LinkStNode * &s)
{
LinkStNode *pre,*p;
pre = s; p = s->next;
while (pre != NULL)
{
free(pre);
pre = p;
if (pre->next == NULL)
break;
p = pre->next;
}free(pre);
}
bool StackEmpty(LinkStNode * &s)
{
return(s->next==NULL);
}
bool Push(LinkStNode * &s, char e)
{
LinkStNode *p;
p = (LinkStNode*)malloc(sizeof(LinkStNode));
p->data = e;
p->next = s->next;
s->next = p;
return true;
}
bool Pop(LinkStNode * &s, char &e)
{
if (s->next == NULL)
return false;
LinkStNode *p=s->next;
e = p->data;
s->next = p->next;
free(p);
return true;
}
bool GetTop(LinkStNode *s, char &e)
{
if (s->next==NULL)
return false;
e = s->next->data;
return true;
}
void Match(char x[])
{
LinkStNode *z;
char v;
InitStack(z);
for (int i = 0; x[i] != '\0'; i++)
{
if (x[i] == '(')
Push(z, x[i]);
else if(x[i]==')')
Pop(z, v);
}
if (StackEmpty(z))
printf("括号匹配\n");
else
printf("括号不匹配\n");
}
int main()
{
char a[] = "woshixiaoguo";
LinkStNode *s;
char e;
InitStack(s);
for (int i = 0; a[i] != '\0'; i++)
{
Push(s, a[i]);
}
GetTop(s, e);
printf("栈顶元素为%c\n", e);
Pop(s, e);
printf("出栈元素为%c\n", e);
Pop(s, e);
printf("出栈元素为%c\n", e);
Pop(s, e);
printf("出栈元素为%c\n", e);
DestroyStack(s);
char b[] = "(()())";
Match(b);
system("pause");
return 0;
}