C语言实现链栈的创建、入栈、出栈、取栈顶、遍历…等基本操作
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef int ElemType;
typedef struct LinkStackNode
{
ElemType data;
struct LinkStackNode *next;
} LinkStack;
int initLinkStack(LinkStack *L)
{
L = (LinkStack *) malloc(sizeof(LinkStack));
if(!L->data) return 0;
L->data = 0;
L->next = NULL;
return 1;
}
int push(LinkStack *L, ElemType e)
{
LinkStack *n;
n = (LinkStack *) malloc(sizeof(LinkStack));
if(!n->data) return 0;
n->data = e;
n->next = L->next;
L->next = n;
return 1;
}
int pop(LinkStack *L, ElemType *e)
{
if(!L->next) return 0;
LinkStack *d = L->next;
*e = d->data;
L->next = d->next;
free(d);
return 1;
}
int getTop(LinkStack *L, ElemType *e)
{
if(!L->next) return 0;
*e = L->next->data;
return 1;
}
void printStack(LinkStack *L)
{
LinkStack *p = L;
while (p)
{
p = p->next;
printf("%d ", p->data);
}
printf("\n");
}
int main()
{
LinkStack L;
initLinkStack(&L);
ElemType e;
printf("入栈元素:");
scanf("%d", &e);
push(&L, e);
getTop(&L, &e);
printf("栈顶元素:%d\n",e);
pop(&L, &e);
printf("出栈元素:%d", e);
printf("\n入栈元素(Ctrl + C结束):");
while (scanf("%d", &e) != EOF)
{
push(&L, e);
printf("入栈元素(Ctrl + C结束):");
}
printf("\n遍历元素:");
printStack(&L);
return 0;
}
