8.12作业

创建单链表,存储4个学生信息(年龄,分数,姓名)。

1、建立学生结构体数组,存放4个学生信息,循环调用插入函数,建立整表
2、任意位置插入一个新学生。变量e是学生结构体变量。
3、任意位置删除一个学生。
4、单链表逆置后将学生信息输出。

mymain.c

#include "stu.h"

int main(int argc, const char *argv[])
{
    Plink L = creat_link();

    stu s[MAX] = {{18,89,"王五"},
                  {20,90,"张三"},
                  {19,96,"李玲"},
                  {18,88,"赵柳"}};
    for(int i=0;i<MAX;i++){
        tail_insert(L,s[i]);
    }
    node_output(L);
    
    int pos;
    printf("请输入你要插入元素的位置:");
    scanf("%d",&pos);
    insert_any(L,pos);
    node_output(L);
    
    int d;
    printf("请输入你要删除元素的位置:");
    scanf("%d",&d);
    delet_any(L,d);
    node_output(L);
    
    node_reverse(L);
    node_output(L);
    return 0;                                
}  

stu.c

#include "stu.h"

Plink creat_link(){
	Plink p = malloc(sizeof(Link));
	if(p==NULL){
		printf("创建链表失败!\n");
		return NULL;
	}
	p->len = 0;
	p->next = NULL;
	return p;
}

int tail_insert(Plink p,stu s){
	if(p==NULL){
		printf("链表不存在!\n");
		return -1;
	}
	Plink t = p;
	for(int i=0;i<p->len;i++){
		t = t->next;
	}
	Plink P = malloc(sizeof(Link));
	P->s = s;
	P->next = NULL;
	t->next = P;
	p->len++;
	return 0;
}

int node_output(Plink p){
	if(p==NULL || p->len == 0 ){
		printf("链表不存在或者链表为空!\n");
		return -1;
	}
	Plink t = p;
	for(int i=0;i<p->len;i++){
	    t = t->next;
		printf("年龄:%d\t成绩:%.2f\t姓名:%s\n",t->s.age,t->s.score,t->s.name);
	}
	return 0;
}

int insert_any(Plink p,int pos){
	if(p==NULL){
		printf("链表不存在!\n");
		return -1;
	}
	Plink t = p;
	for(int i=0;i<pos-1;i++){
		t = t->next;
	}
	Plink Q = malloc(sizeof(Link));
	int age;
	float score;
	char name[20];
	printf("请输入插入学生的年龄:");
	scanf("%d",&age);
	printf("请输入插入学生的成绩:");
	scanf("%f",&score);
	printf("请输入插入学生的姓名:");
	scanf("%s",name);
	Q->s.age = age;
	Q->s.score = score;
	strcpy(Q->s.name, name);
	Q->next = t->next;
	t->next = Q;
	p->len++;
	printf("插入学生信息成功!\n");
	return 0;
}
int delet_any(Plink p,int pos){
	if(p==NULL || p->len==0){
		printf("链表不存在或者链表为空!\n");
		return -1;
	}
	Plink t = p;
	for(int i=0;i<pos-1;i++){
		t = t->next;
	}
	Plink Q = t->next;
	t->next = Q->next;
	free(Q);
	Q = NULL;
	p->len--;
	printf("删除学生信息成功!\n");
	return 0;
}

int node_reverse(Plink p){
	if(p==NULL ||p->len == 0){
		printf("链表不存在或者链表为空!\n");
		return -1;
	}
	Plink t = p->next;
	Plink Q = t->next;
	while(Q!=NULL){
		t->next = Q->next;
		Q->next = p->next;
		p->next = Q;
		Q = t->next;
	}
	printf("链表逆置成功!\n");
	return 0;
}

stu.h

#ifndef _STU_H_
#define _STU_H_
#include <myhead.h>
#define MAX 4
typedef struct{
	int age;
	float score;
	char name[20];
}stu;

typedef struct node{
	union{
		int len;
		stu s;
	};
	struct node *next;
}Link,*Plink;

Plink creat_link();
int tail_insert(Plink p,stu s);
int node_output(Plink p);
int insert_any(Plink p,int pos);
int delet_any(Plink p,int pos);
int node_reverse(Plink p);
#endif

运行结果

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值