//链栈,自己实现一遍,但是节点存储不是整数,
//存储学生信息(年龄,分数,姓名)三级引用。
//1、建立学生信息结构体,将data改为学生信息结构体类型。
//2、循环入栈和入队。
#include <myhead.h>
#define MAX 3
#define AZ 20
//链栈,自己实现一遍,但是节点存储不是整数,
//存储学生信息(年龄,分数,姓名)三级引用。
//1、建立学生信息结构体,将data改为学生信息结构体类型。
//2、循环入栈和入队。
typedef struct sutdent//学生信息结构体
{
char name[AZ];
int age;
float score;
}stu;
typedef struct node//节点结构体
{
stu information;
struct node *next;
}Node,*PNode;
typedef struct //链栈结构体
{
int len;
Node *head;
}Link,*Plink;
Plink head_my()//头文件申请函数
{
Plink p=malloc(sizeof(Link));
if(p==NULL)
{
printf("创建失败\n");
return NULL;
}
p->len=0;//格式化
p->head=NULL;
return p;
}
int int_my(Plink L)//入栈
{
if(L==NULL)
{
printf("链栈为空\n");
return -1;
}
stu inf[AZ];
int i;
printf("请输入链栈成员\n");
for(i=0;i<MAX;i++)
{
Node * p=malloc(sizeof(Node));
scanf("%s%d%f",inf[i].name
,&inf[i].age,&inf[i].score);
p->information=inf[i];
p->next=L->head;
L->head=p;
L->len++;//计数
}
printf("入栈成功\n");
return 0;
}
int output_my(Plink L)
{
if(L==NULL||L->len==0)
{
printf("链栈为空\n");
return -1;
}
PNode t=L->head;//指向第一个正常节点
int i;
for(i=0;i<MAX;i++)
{
printf("姓名:%s\t年龄:%d\t年龄:%.2f\n",t->information.name
,t->information.age,t->information.score);
t=t->next;
}
return 0;
}
int out_strack_my(Plink L)//出栈
{
if(L==NULL||L->len==0)
{
printf("链栈为空\n");
return -1;
}
PNode Q=NULL;//暂时保留出栈成员,防止链短丢失!!!
int i,b;
printf("请输入你想出栈的个数(先入后出原则出栈),若出数大于等于栈的长度,则销毁此栈\n");
scanf("%d",&b);
b>=MAX?b=5:b;
for(i=0;i<b;i++)
{
Q=NULL;
Q=L->head;
L->head=L->head->next;
printf("出栈成员所含信息为:\n");
printf("姓名:%s\t年龄:%d\t年龄:%.2f\n",Q->information.name
,Q->information.age,Q->information.score);
printf("出栈成功\n");
free(Q);
L->len--;
}
if(Q==NULL)
{
free(L);
L==NULL;
}
return 0;
}
int main(int argc, const char *argv[])
{
Plink M=head_my();
int_my(M);
output_my(M);
printf("\n");
out_strack_my(M);
output_my(M);
return 0;
}
出栈时想设计成指定出栈个数,但总是段错误,有能帮忙大佬解惑吗?不胜感激。