链栈,自己实现一遍,但是节点存储不是整数,存储学生信息(年龄,分数,姓名)三级引用。
1、建立学生信息结构体,将data改为学生信息结构体类型。
2、循环入栈和入队。
循环入栈代码
#include <myhead.h>
//学生信息
typedef struct students
{
int age;
float score;
char name[20];
}stu;
//正常节点
typedef struct node1
{
stu data;
struct node1 *next;
}Normal,*Pnormal;
//头结点
typedef struct
{
Pnormal top;//栈顶指针
Pnormal next;//节点指针域
}Head,*Phead;
//创建头结点
Phead create()
{
Phead p = malloc(sizeof(Head));
if(p == NULL)
{
printf("创建失败\n");
return NULL;
}
p->top = NULL;
p->next = NULL;
return p;
}
//入栈函数
int push_stack(Phead Q,stu e)
{
if(Q==NULL)
{
printf("入栈失败\n");
return -1;
}
Pnormal p = malloc(sizeof(Normal));
p->next = NULL;
printf("创建正常节点成功\n");
p->data = e;
p->next = Q->next;
Q->next = p;
Q->top = p;
return 0;
}
//输入函数
void input_stack(Phead Q,int n)
{
printf("%d",n);
stu e;
int i;
for(i=0;i<n;i++)
{
printf("请输入学生信息:");
scanf("%d%f%s",&e.age,&e.score,e.name);
push_stack(Q,e);
}
}
//输出函数
void output_stack(Phead Q)
{
Pnormal t = Q->next;
while(t!=NULL)
{
printf("%d\t%.2f\t%s",t->data.age,t->data.score,t->data.name);
t=t->next;
printf("\n");
}
}
int main(int argc, const char *argv[])
{
Phead Q = create();
int n;
printf("请输入学生数量:");
scanf("%d",&n);
input_stack(Q,n);
output_stack(Q);
return 0;
}
循环入队代码
#include <myhead.h>
//学生信息
typedef struct studets
{
int age;
float score;
char name[20];
}stu;
//正常节点
typedef struct node
{
stu data;
struct node *next;
}Normal,*Pnormal;
//头结点
typedef struct
{
Pnormal rear;
Pnormal front;
int len;
}Head,*Phead;
//创建头结点
Phead create()
{
Phead p = malloc(sizeof(Head));
if(p == NULL)
{
printf("创建失败\n");
return NULL;
}
p->len = 0;
p->rear = NULL;
p->front = NULL;
return p;
}
//入队函数
int insert_rear(Phead Q,stu e)
{
Pnormal p = malloc(sizeof(Normal));
if(p == NULL)
{
printf("创建失败\n");
return -1;
}
p->data = e;
p->next = NULL;
if(Q->rear == NULL)
{
Q->rear = p;
Q->front = p;
}
else
{
Q->rear->next = p;
Q->rear = p;
}
Q->len++;
}
//输入函数
void input(Phead Q,int n)
{
stu e;
int i;
for(i=0;i<n;i++)
{
printf("请输入第%d位学生的信息:",i+1);
scanf("%d%f%s",&e.age,&e.score,e.name);
insert_rear(Q,e);
}
}
//输出函数
void output(Phead Q)
{
Pnormal t = Q->front;
while(t!=NULL)
{
printf("%d\t%.2f\t%s\n",t->data.age,t->data.score,t->data.name);
t=t->next;
}
}
//销毁函数
void destroy(Phead Q)
{
Pnormal t = Q->front;
while(t->next != NULL)
{
free(Q->front);
t=t->next;
Q->front = t;
}
free(Q);
Q=NULL;
printf("销毁成功\n");
}
int main(int argc, const char *argv[])
{
int n;
Phead Q = create();
printf("请输入学生数量:");
scanf("%d",&n);
input(Q,n);
output(Q);
destroy(Q);
return 0;
}
xmind