关于链栈的有关问题

关于链栈的问题
/*我创建的算不算是链栈?如果不算链栈,该如何修改?*/
#include<stdio.h>
#include<stdlib.h>
typedef struct Node//定义链栈
{
int a;
struct Node *next;
}LinkedStackNode,*LinkedStack;
void main()
{
LinkedStack LinkedStackInit();
LinkedStack LinkedStackPush(LinkedStack x,int y);
LinkedStack LinkedStackPop(LinkedStack x);
LinkedStack LinkedStackPop(LinkedStack x);
int LinkedStackGetTop(LinkedStack x);
int LinkedStackLength(LinkedStack x);
LinkedStack LinkedStackClear(LinkedStack x);

LinkedStack p;
p=LinkedStackInit();
printf("%d\n",LinkedStackEmpty(p));
p=LinkedStackPush(p,3);
printf("%d\n",p->next->a);
p=LinkedStackPop(p);
printf("%d\n",LinkedStackEmpty(p));
p=LinkedStackPush(p,3);
printf("栈顶元素为:%d\n",LinkedStackGetTop(p));
printf("栈长为:%d\n",LinkedStackLength(p));
p=LinkedStackClear(p);
printf("栈已清空\n");
}
LinkedStack LinkedStackInit()//初始化链栈
{
LinkedStack p;
p=malloc(sizeof(LinkedStackNode));
p->next=NULL;
}
int LinkedStackEmpty(LinkedStack x)//判空
{
if(x->next==NULL)
return 1;
else
return 0;
}
LinkedStack LinkedStackPush(LinkedStack x,int y)//入栈
{
LinkedStack p=x,p2;
while(p->next!=NULL)
p=p->next;
p2=malloc(sizeof(LinkedStackNode));
p->next=p2;
p2->a=y;
p2->next=NULL;
return x;
}
LinkedStack LinkedStackPop(LinkedStack x)//出栈
{
LinkedStack p=x,p2;
if(x->next==NULL)
{
printf("栈空,无法出栈");
exit(0);
}
else
{
while(p->next->next!=NULL)
p=p->next;
p2=p->next;
free(p2);
p->next=NULL;
return x;
}
}
int LinkedStackGetTop(LinkedStack x)//取栈顶元素
{
LinkedStack p=x;
if(x->next==NULL)
{
printf("栈空");
exit(0);
}
else
{
while(p->next!=NULL)
p=p->next;
return p->a;
}
}
int LinkedStackLength(LinkedStack x)//求栈长
{
int length=0;
LinkedStack p=x;
while(p->next!=NULL)
{
p=p->next;
length++;
}
return length;
}
LinkedStack LinkedStackClear(LinkedStack x)//清空栈
{
x->next=NULL;
return x;
}
链栈

------解决方案--------------------
看着差不多,但是你的实现非常的低效,每次的push跟pop操作都需要遍历找到队列尾部,我没说错吧
为什么不直接维护一个头指针,插入的时候直接p->next = head; head = p;然后出栈的时候直接head->next != NULL ? head = head->next : NULL呢,这样多方便,O(1)的时间复杂度
------解决方案--------------------

#include<stdio.h>
#include<stdlib.h>

typedef struct Node//定义链栈
{
    int a;
    struct Node *next;
}LinkedStackNode,*LinkedStack;


LinkedStack LinkedStackInit();
LinkedStack LinkedStackPush(LinkedStack x,int y);