实现链栈的代码
执行结果
完整代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef int data_t;
typedef struct Node
{
data_t val;
struct Node* next;
}*linkatck;
//节点的创建
linkatck link_stack_create(data_t value);
//入栈(头插)
int link_stack_push(linkatck* H,data_t value);
//出栈(头删)
int link_stack_pop(linkatck* H);
//遍历
int link_stack_show(linkatck H);
//销毁
int link_stack_free(linkatck *H);
int main(int argc, const char *argv[])
{
linkatck ls=NULL;
int value=0;
printf("please input \n");
while(1)
{
scanf("%d",&value);
link_stack_push(&ls,value);
if(getchar()=='\n')
break;
}
//出栈3个元素
link_stack_pop(&ls);
link_stack_pop(&ls);
link_stack_pop(&ls);
link_stack_show(ls);
link_stack_free(&ls);
link_stack_show(ls);
return 0;
}
//节点的创建
linkatck link_stack_create(data_t value)
{
linkatck H=(linkatck)malloc(sizeof(struct Node));
if(H==NULL)
{
printf("malloc fail\n");
return NULL;
}
H->val=value;
H->next=NULL;
return H;
}
//入栈(头插)
int link_stack_push(linkatck* H,data_t value)
{
linkatck newsnode=link_stack_create(value);
if(*H==NULL)
{
*H=newsnode;
return 0;
}
newsnode->next=(*H)->next;
(*H)->next=newsnode;
newsnode->val=(*H)->val;
(*H)->val=value;
return 0;
}
//出栈(头删)
int link_stack_pop(linkatck* H)
{
if(*H==NULL)
return -1;
if((*H)->next==NULL)
{
free(*H);
*H=NULL;
return 0;
}
linkatck del=(*H)->next;
(*H)->next=del->next;
(*H)->val=del->val;
free(del);
del=NULL;
return 0;
}
//遍历
int link_stack_show(linkatck H)
{
if(H==NULL)
{
printf("linkatck is empty\n");
return 0;
}
linkatck p=H;
printf("show : ");
while(p)
{
printf("%d ",p->val);
p=p->next;
}
puts("");
return 0;
}
//销毁
int link_stack_free(linkatck *H)
{
if(*H==NULL)
return -1;
while(*H)
{
linkatck del=*H;
*H=(*H)->next;
free(del);
del=NULL;
}
return 0;
}