链栈,自己实现一遍,但是节点存储不是整数,存储学生信息(年龄,分数,姓名)三级引用。
建立学生信息结构体,将data改为学生信息结构体类型。
#include <stdio.h>
#include <string.h>
#include <myhead.h>
//链栈,自己实现一遍,但是节点存储不是整数,存储学生信息(年龄,分数,姓名)三级引用。
//建立学生信息结构体,将data改为学生信息结构体类型。
typedef struct student//储存学生信息结构体
{
int age;//年龄
int score;//分数
char name[20];//名字
}student;
typedef struct node
{
student data;
struct node *next;
}Node;
typedef struct
{
int len;
Node *top;
}Stack,*Pstack;
Pstack creat_stack()//创建栈
{
Pstack p = malloc(sizeof(Stack));
if(p==NULL)
{
printf("创建失败\n");
return NULL;
}
p->len = 0;
p->top = NULL;
return p;
}
int input_stack(Pstack L)//入栈
{
if(L==NULL)
{
printf("链栈不存在或为空\n");
return -1;
}
Node *p;
student e[10];
int i;
for(i=0;i<4;i++)//函数内部循环入栈
{
p = malloc(sizeof(Node));
printf("请输入第:%d个学生信息",i+1);
scanf("%d%d%s",&e[i].age,&e[i].score,e[i].name);
// Node *p = malloc(sizeof(Node));
p->data = e[i];
p->next = L->top;
L->top = p;
L->len++;
}
printf("\n");
return 0;
}
int output_stack(Pstack L)//输出学生信息
{
if(L==NULL)
{
printf("链栈不存在或为空\n");
return -1;
}
int i;
Node *t = L->top;
for(i=0;i<L->len;i++)
{
printf("年龄:%d\t成绩:%d\t姓名:%s\n",
t->data.age,t->data.score,
t->data.name);
t = t->next;
}
printf("\n");
return 0;
}
int pop_stack(Pstack L)//出栈
{
if(L==NULL)
{
printf("链栈不存在或为空\n");
return -1;
}
Node *Q = L->top;
L->top = Q->next;
free(Q);
Q = NULL;
L->len--;
printf("出栈成功\n");
return 0;
}
int main(int argc,const char*argv[])
{
Pstack L = creat_stack();//申请栈空间
#if 0
//手动输入
student e[3] = {{1,1,"张三"},{2,2,"李四"},{3,3,"王五"}};
input_stack(L,e[0]);
input_stack(L,e[1]);
input_stack(L,e[2]);
#endif
#if 0
//外部循环入栈
int i;
student e[10];
for(i=0;i<4;i++)
{
printf("请输入第:%d个学生信息",i+1);
scanf("%d%d%s",&e[i].age,&e[i].score,e[i].name);
input_stack(L);
}
#endif
input_stack(L);//入栈
output_stack(L);//输出
pop_stack(L);//出栈
output_stack(L);//输出
return 0;
}