2024.8.13

作业:链栈,自己实现一遍,但是节点存储不是整数,存储学生信息(年龄,分数,姓名)三级引用。
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;
	}
}

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值