节点存储不是整数,存储学生信息(年龄,分数,姓名)三级引用。1、建立学生信息结构体,将data改为学生信息结构体类型。2、循环入栈和入队。

#include<myhead.h>

typedef struct student
{
	int name[20];
	int age;
	int score;
}student;
typedef struct node
{
	student data;
	struct node *next;
}Node;
typedef struct
{
	int len;
	Node *top;
}Stack,*Pstack;

Pstack creat_stack()
{
	Pstack p=malloc(sizeof(Stack));
	if(p==NULL)
	{
		printf("创建失败\n");
		return NULL;
	}
	p->len=0;
	p->top=NULL;
	return p;
}

int input_stack(Pstack L)
{
	if(L==NULL)
	{
		printf("链栈不存在或空\n");
		return -1;
	}
	Node *p;
	student e[10];
	int i;
	for(i=0;i<4;i++)
	{
		p=malloc(sizeof(Node));
		printf("请输入第%d个信息\n",i+1);
		scanf("%ls %d %d",e[i].name,&e[i].score,&e[i].age);

		p->data=e[i];
		p->next=L->top;
		L->top=p;
		L->len++;
	}
	printf("\n");
	return 0;

}

int output_stack(Pstack L)
{
	if(L==NULL)
	{
		printf("链栈不存在或空\n");
		return -1;
	}
	int i;
	Node *t=L->top;
	for(i=0;i<L->len;i++)
	{
		printf("姓名:%ls成绩:%d年龄:%d",t->data.name,t->data.score,t->data.age);
		t=t->next;
	}
	printf("\n");
	return 0;
}

int pop_stack(Pstack L)
{
	if(L==NULL)
	{
		printf("栈链不存在或空\n");
		return -1;
	}
	Node *Q=L->top;
	L->top=Q->next;
	free(Q);
	Q=NULL;
	L->len--;
	printf("出栈成功\n");
	return 0;
}

int main(int argc, const char *argv[])
{
	Pstack L=creat_stack();
	input_stack(L);

	output_stack(L);
	
	pop_stack(L);

	output_stack(L);
	
	return 0;
}

编译后:

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,我们需要确定xtx文档的格式和存储方式。假设xtx文档是一个纯文本文件,每行包含一条信息,每条信息以逗号分隔不同的字段,例如: ``` John,Smith,25,123 Main St. Amy,Johnson,30,456 1st Ave. ``` 我们可以设计一个结构体来表示每条信息: ```c typedef struct { char first_name[50]; char last_name[50]; int age; char address[100]; } Person; ``` 然后,我们可以定义一个链表节点,用于存储每个Person结构体: ```c typedef struct node { Person data; struct node* next; } Node; ``` 接下来,我们需要编写一个函数来读取xtx文档并将信息存储到链表中。这个函数可以使用标准C库中的文件操作函数来读取文件,然后使用字符串处理函数来分离每行中的不同字段,并将它们转换为Person结构体。 ```c Node* read_file(char* filename) { Node* head = NULL; Node* tail = NULL; FILE* file = fopen(filename, "r"); if (file == NULL) { printf("Failed to open file %s\n", filename); return NULL; } char line[256]; while (fgets(line, sizeof(line), file)) { // remove newline character line[strcspn(line, "\n")] = 0; // split line into fields char* first_name = strtok(line, ","); char* last_name = strtok(NULL, ","); char* age_str = strtok(NULL, ","); char* address = strtok(NULL, ","); // convert age to integer int age = atoi(age_str); // create a new node for the person Node* node = malloc(sizeof(Node)); strcpy(node->data.first_name, first_name); strcpy(node->data.last_name, last_name); node->data.age = age; strcpy(node->data.address, address); node->next = NULL; // add the node to the linked list if (head == NULL) { head = node; } else { tail->next = node; } tail = node; } fclose(file); return head; } ``` 这个函数首先打开指定的文件,然后使用fgets函数逐行读取文件内容。对于每行内容,它使用strtok函数将其分离为不同的字段,并使用atoi函数将age字段转换为整数。然后,它创建一个新的节点,并将Person结构体存储节点data字段中。最后,它将节点添加到链表中,并返回链表的头指针。 你可以使用以下代码来测试这个函数: ```c int main() { Node* head = read_file("FILENAME1.xtx"); Node* node = head; while (node != NULL) { printf("%s %s, age %d, address %s\n", node->data.first_name, node->data.last_name, node->data.age, node->data.address); node = node->next; } return 0; } ``` 这个程序将读取FILENAME1.xtx文件,并将其中的信息打印到屏幕上。你可以根据需要修改打印格式和字段。注意,这个程序并没有处理错误,例如文件不存在或格式错误等情况。在实际应用中,你需要添加必要的错误处理代码来保证程序的健壮性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值