1.
2.代码实现:
节点的定义:
//定义链栈的头部
typedef int SElemType;
typedef struct StackNode
{
SElemType data;
struct StackNode *next;
}StackNode,*LinkStackPtr;
typedef struct LinkStack
{
LinkStackPtr top;
int count;
}LinkStack;
初始化栈:
void InitLinkStack(LinkStack &L)
{
L.top = (LinkStackPtr)malloc(sizeof(StackNode));
L.top->data = NULL;
L.top->next = NULL;
L.count = 0;
}
判断栈为空
bool IsEmpty(LinkStack &L)
{
if(L.top->next==NULL)
return true;
else
return false;
}
入栈:
//入栈
void Push(LinkStack &L, SElemType e)
{
LinkStackPtr r = (LinkStackPtr)malloc(sizeof(StackNode));
r->data = e;
r->next=L.top->next;
L.top->next= r;
L.count++;
}
出栈:
//出栈
void Pop2(LinkStack &L)
{
LinkStackPtr r = L.top->next;
L.top->next = r->next;
//e = r->data;
printf("弹出%d,\n", r->data);
free(r);
L.count--;
}
栈顶元素:
void GetTop(LinkStack &L)
{
if (!IsEmpty(L))
{
printf("栈顶元素%d\n", L.top->next->data);
}
else
printf("kongzhan ");
}
打印元素:
//打印
void PrintStack(LinkStack L)
{
LinkStackPtr temp = L.top;
while (temp->next!= NULL)
{
printf("打印%d \n", temp->next->data);
temp=temp->next;
}
}
主程序:
void main()
{
LinkStack s;
InitLinkStack(s);
//入栈
SElemType e;
printf("输入元素压栈\n");
scanf("%d", &e);
Push(s, e);
scanf("%d", &e);
Push(s, e);
//栈顶元素
GetTop(s);
//出栈
Pop2(s);
//打印
PrintStack(s);
system("pause");
}
参考资料:
- 《大话数据结构》