链栈
链栈 栈的链式存储结构, 链栈是没有附加头结点的受限的单链表。
栈顶指针就是链表的头指针
链栈的类型;
typedef struct StackNode
{
DataType data;
struct StackNode *next;
}StackNode;
typedef struct LinkStack
{
StackNode *top;
int stacksize;
}
初始化栈
int InitStack(LinkStack *S)
{
S->top = NULL;
S->stacksize = 0;
return 0;
}
判断链栈是否为空
int StackEmpty(LinkStack *S)
{
if (S.top == NULL)
return 1;
else
return 0;
}
元素入栈
int Push(LinkStack *S, DataType x)
{
StackNode *p = (StackNode*)malloc(sizeof(StackNode));
if (p == NULL)
exit(1);
p.data = x;
p.next = S.top;
S.top = p;
S->stacksize++;
return 0;
}
元素出栈
int Pop(LinkStack *S, DataType &x)
{
StackNode *p = S->top;
x = p->data;
S->top = p->next;
S->stacksize--;
free(p);
return 0;
}
取栈顶元素
int GetTop(LinkStack *S, DataType &x)
{
if (StackEmpty(S))
{
printf("栈为空\n");
return 1;
}
x = S->top->data;
return 0;
}
总结:。。。。。。。。。
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
typedef struct StackNode
{
int data;
struct StackNode *next;
}StackNode;
typedef struct LinkStack
{
StackNode *top;
int stacksize;
}LinkStack;
int InitStack(LinkStack *S);
int StackEmpty(LinkStack *S);
int Push(LinkStack *S, int x);
int Pop(LinkStack *S, int &x);
int GetTop(LinkStack *S, int &x);
int main()
{
int i, x;
LinkStack *S = (LinkStack*)malloc(sizeof(LinkStack));
InitStack(S);
for (i=0; i<10; i++)
{
Push(S, i);
}
GetTop(S, x);
printf("栈顶元素为:%d\n", x);
for (i=0; i<5; i++)
{
Pop(S, x);
printf("%d ", x);
}
printf("\n");
return 0;
}
int InitStack(LinkStack *S)
{
S->top = NULL;
S->stacksize = 0;
return 0;
}
int StackEmpty(LinkStack *S)
{
if (S->top == NULL)
return 1;
return 0;
}
int Push(LinkStack *S, int x)
{
StackNode *p = (StackNode*)malloc(sizeof(StackNode));
if (p == NULL)
exit(2);
p->data = x;
p->next = S->top;
S->top = p;
S->stacksize++;
return 0;
}
int Pop(LinkStack *S, int &x)
{
StackNode *p = S->top;
x = p->data;
S->top = p->next;
S->stacksize--;
free(p);
return 0;
}
int GetTop(LinkStack *S, int &x)
{
if (StackEmpty(S))
return 1;
x = S->top->data;
return 0;
}
浙公网安备 33010602011771号