C言語実装スタック(簡易版)
11879 ワード
#include
#include
typedef int DataType;
typedef struct stacknode
{
DataType data;
struct stacknode *next;
} LinkStack;
LinkStack *InitStack()
{
LinkStack *S;
S = NULL;
return S;
}
int EmptyStack(LinkStack *S)
{
if (S == NULL)
return 1;
else
return 0;
}
LinkStack *Pop(LinkStack *S, DataType *x)
{
LinkStack *p;
if (EmptyStack(S))
{
printf("\t , !");
return NULL;
}
else
{
*x = S->data;
p = S;
S = S->next;
free(p);
return S;
}
}
LinkStack *Push(LinkStack *S, DataType x)
{
LinkStack *p;
p = (LinkStack *)malloc(sizeof(LinkStack));
p->data = x;
p->next = S;
S = p;
return S;
}
int GetTop(LinkStack *S, DataType *x)
{
if (EmptyStack(S))
{
printf("\t !");
return 0;
}
else
{
*x = S->data;
return 1;
}
}
void ShowStack(LinkStack *S)
{
LinkStack *p = S;
if (EmptyStack(S))
{
printf("\t !");
}
else
{
printf(" :");
while (p != NULL)
{
printf("%2d", p->data);
p = p->next;
}
}
}
int main()
{
int x;
LinkStack *Stack;
Stack = InitStack(Stack);
Stack = Push(Stack, 1);
Stack = Push(Stack, 2);
Stack = Push(Stack, 3);
Stack = Pop(Stack, &x);
ShowStack(Stack);
GetTop(Stack, &x);
printf("
%d", x);
return 0;
}