链栈,自己实现一遍,但是节点存储不是整数,存储学生信息(年龄,分数,姓名)三级引用。
1、建立学生信息结构体,将data改为学生信息结构体类型。
2、循环入栈和出栈。
#include<myhead.h>
typedef struct
{
int age;
float score;
char name[20];
}stu;
typedef struct node
{
stu data;
struct node *next;
}Link,*Pstu;
typedef struct
{
Pstu top;
Pstu next;
}Stack,*Pstack;
Pstack create()
{
Pstack p=malloc(sizeof(Stack));
if(p==NULL)
{
printf("创建头结点失败\n");
return NULL;
}
p->top=NULL;
p->next=NULL;
}
int push(Pstack S)
{
int e;
if(S==NULL)
{
printf("入栈失败\n");
return -1;
}
Pstu p=malloc(sizeof(Link));
printf("年龄:\t");
scanf("%d",&p->data.age);
printf("分数:\t");
scanf("%f",&p->data.score);
printf("姓名:\t");
scanf("%s",p->data.name);
p->next=S->next;
S->next=p;
S->top=p;
return 0;
}
void output(Pstack S)
{
Pstu t=S->next;
while(t!=NULL)
{
printf("年龄:%d\t分数:%.2f\t姓名:%s\n",
t->data.age,t->data.score,t->data.name);
t=t->next;
}
}
int main(int argc, const char *argv[])
{
Pstack S=create();//创建头结点
//循环入栈
int i,n;
printf("请输入学生个数:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
push(S);
}
//出栈
output(S);
return 0;
}
代码演示