作业:链栈,自己实现一遍,但是节点存储不是整数,存储学生信息(年龄,分数,姓名)三级引用。
1、建立学生信息结构体,将data改为学生信息结构体类型。
2、循环入栈和入队。
注意:栈头结点的top指针指向最后进的指针,并且都是后进的指针指向前一个指针。
代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct node{
int age;
char name[10];
int score;
struct node *next;
}data,*pdata;
typedef struct head{
int len;
struct node *top;
}stack,*pstack;
pstack initStack();
int insertData(pstack p);
int deleteData(pstack p);
int outStack(pstack p);
int main(int argc, const char *argv[])
{
pstack p= initStack();
insertData(p);
outStack(p);
printf("\n\n");
deleteData(p);
outStack(p);
return 0;
}
pstack initStack(){
pstack p=malloc(sizeof(stack));
if(p==NULL){
printf("申请空间失败\n");
return NULL;
}
p->len=0;
p->top=NULL;
return p;
}
int insertData(pstack p){
if(p==NULL){
printf("栈不存在。");
return -1;
}
int start=0;
while(start==0){
pdata pd=malloc(sizeof(data));
if(pd==NULL){
printf("申请空间失败");
return -2;
}
char name[10];
int age,score;
printf("请输入学生姓名");
scanf(" %s",name);
printf("请输入学生年龄");
scanf(" %d",&age);
printf("请输入学生成绩");
scanf(" %d",&score);
strcpy(pd->name,name);
pd->age=age;
pd->score=score;
pd->next=p->top;
p->top=pd;
p->len++;
printf("继续输入请输入0,退出请输入1\n");
scanf(" %d",&start);
printf("\n");
}
return 0;
}
int deleteData(pstack p){
if(p==NULL){
printf("栈不存在。\n");
return -1;
}
if(p->top==NULL){
printf("栈空\n");
return -2;
}
pdata pd=p->top;
p->top=p->top->next;
free(pd);
p->len--;
printf("删除成功");
return 0;
}
int outStack(pstack p){
if(p==NULL){
printf("栈不存在。\n");
return -1;
}
if(p->top==NULL){
printf("栈空\n");
return -2;
}
pdata pd=p->top;
while(pd!=NULL){
printf("学生名字%s\t年龄%d\t成绩%d\n",pd->name,pd->age,pd->score);
pd=pd->next;
}
}
运行结果: