题目:实现链栈的代码
代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct stack
{
int num;
struct stack *next;
}*link;
//创建节点
link create()
{
link l=(link)malloc(sizeof(struct stack));
if(NULL==l)
return NULL;
l->num=0;
l->next=NULL;
return l;
}
//头插
link insert_head(link l,int num)
{
link q=create();
q->num=num;
if(NULL==l)
l=q;
else
{
q->next=l->next;
l->next=q;
q->num=l->num;
l->num=num;
}
return l;
}
//头删
link delete_head(link l)
{
if(NULL==l)
return NULL;
else if(l->next==NULL)
{
printf("出栈元素是:%d\n",l->num);
free(l);
l=NULL;
}
else
{
link q=l->next;
printf("出栈元素是:%d\n",l->num);
l->num=q->num;
l->next=q->next;
free(q);
q=NULL;
}
return l;
}
//遍历
void output(link l)
{
if(l==NULL)
return;
link q=l;
puts("栈的元素是;");
while(q!=NULL)
{
printf("%d ",q->num);
q=q->next;
}
}
int main(int argc, const char *argv[])
{
link l=NULL;
int n,num;
printf("请输入进栈的个数:\n");
scanf("%d",&n);
printf("请输入进栈的元素:\n");
for(int i=0;i<n;i++)
{
scanf("%d",&num);
l=insert_head(l,num);
}
output(l);
printf("请输入出栈的个数:\n");
scanf("%d",&n);
for(int i=0;i<n;i++)
{
l=delete_head(l);
}
return 0;
}
结果: