【数据结构】链表 - 学生成绩

“Sqlist.h”

#ifndef LINKLIST_H_INCLUDED
#define LINKLIST_H_INCLUDED
#include <stdio.h>
#include <stdlib.h>

#define TRUE 1
#define FALSE 0
typedef struct student{
    char number[10];
    char name[10];
    int Score;
}Student;

typedef struct NODE{
    struct NODE *next;
    Student data;
}Node,*Linklist;

int Linklist_init(Linklist *L);
void Linklist_input(Linklist *L);
void print_Linklist(Linklist L);
int Linklist_length(Linklist L);
void Linklist_go_die(Linklist *L);
void Linklist_free(Linklist L,int Number);
void Linklist_insert(Linklist *L,int Number);
int Linklist_find(Linklist L,int input);
void Linklist_get(Linklist L,int i,Linklist *s) ;
#endif // LINKLIST_H_INCLUDED

"Sqlist.c"

#include "Linklist.h"

int Linklist_init(Linklist *L)
{
    (*L) = (Linklist)malloc(sizeof(Node));
    if(!(*L))
    {
        printf("分配失败");
        return FALSE;
    }
    (*L)->next = NULL;
    return TRUE;
}

void Linklist_input(Linklist *L)
{
    int length = 0;
    Linklist s;
    Linklist q = *L;
    printf("你要添加几个数据:");
    while(length <=0)
    {
        scanf("%d",&length);
    }
    printf("\n");
    while(q->next)
    {
        q = q ->next;
    }
    while(length > 0)
    {
        fflush(stdin);
        s = (Linklist)malloc(sizeof(Node));
        printf("请输入学号:");
        scanf("%s",s->data.number);
        printf("请输入姓名:");
        scanf("%s",s->data.name);
        printf("请输入成绩:");
        scanf("%d",&(s->data.Score));
        s->next = NULL;
        q->next = s;
        q = q -> next;
        length--;
    }
}
void Linklist_insert(Linklist *L,int Number)
{
    Linklist q = *L;
    Linklist s;
    Linklist t;
    if(Number <= 0)
    {
        printf("数据异常");
        return;
    }
    s = (Linklist)malloc(sizeof(Node));
    printf("请输入学号:");
    scanf("%s",s->data.number);
    printf("请输入姓名:");
    scanf("%s",s->data.name);
    printf("请输入成绩:");
    scanf("%d",&(s->data.Score));
    s->next = NULL;

    while(q&&Number)
    {
            t = q;
            Number--;
            q = q->next;
    }
    if(Number>0)
    {
            printf("异常\n");
            return;
    }
    else
    {
            t->next = s;
            s->next = q;
    }
}
void print_Linklist(Linklist L)
{

    printf("List:\n");
    printf("%6s  %6s  %6s\n","学号","姓名","成绩");
    while(L->next)
    {
        L = L->next;
        printf("|%6s|%6s|%3s%3d|\n",L->data.number,L->data.name," ",L->data.Score);
    }
    printf("\n");
}

int Linklist_search(Linklist L,int data)
{
    L = L->next;
    while(L)
    {
        if(data == L->data.Score)
        {
            return TRUE;
        }
        L=L->next;
    }
    return FALSE;
}

void Linklist_get(Linklist L,int i,Linklist *s)  //获取第i个元素的信息 打印出来
{
    if(i<0)
    {
        printf("数据异常");
        return;
    }
    while(L->next&&i)
    {
        L = L->next;
        i--;
    }
    if(i>0)
    {
        printf("数据异常");
        return;
    }
    *s = L;
}
int Linklist_find(Linklist L,int input)
{
    int i=0;
    while(L)
    {
        i++;
        L = L->next;
        if(input == L->data.Score)
        {
            return i;
        }
    }
    return -1;
}
int Linklist_length(Linklist L)
{
    int length = 0;
    while(L->next)
    {
        L = L->next;
        length ++;
    }
    return length;
}

void Linklist_go_die(Linklist *L)
{
    Linklist p;
    while(*L)
    {
        p = *L;
        (*L) = (*L)->next;
        free(p);
    }
}

void Linklist_free(Linklist L,int Number)
{
    Linklist Aid;
    if(Number <= 0)
    {
        printf("数据异常");
        return;
    }
    while(L&&Number)
    {
            Aid = L;
            Number--;
            L = L->next;
    }
    if(Number>0)
    {
            printf("异常\n");
            return;
    }
    else
    {
            Aid->next = L->next;
            free(L);
    }
}

"main.c"

#include <stdio.h>
#include <stdlib.h>
#include "Linklist.h"

int main()
{
    Linklist L;
    Linklist s;
    int rec;
    int input = 0;
    system("color 3e");
    Linklist_init(&L);
    Linklist_input(&L);
    print_Linklist(L);
    while(1)
    {
        printf("\n\n【输入操作】\n1.获取i元素\t2.查询\t3.添加\t4.插入\t5.删除\t6.求长度\t7.显示全部\t8.销毁退出\n:");
        scanf("%d",&rec);
        switch(rec){
            case 1:
                printf("你要查找第几个元素:");
                scanf("%d",&input);
                Linklist_get(L,input,&s);
                if(s!=NULL)printf("学号:%4s姓名:%4s成绩:%4d",s->data.number,s->data.name,s->data.Score);
                break;
            case 2:
                printf("请输入你要查询的成绩:");
                scanf("%d",&input);
                input = Linklist_find(L,input);
                if(input!=-1)
                {
                    printf("找到第%d个\n",input);
                    Linklist_get(L,input,&s);
                    printf("学号:%4s姓名:%4s成绩:%4d",s->data.number,s->data.name,s->data.Score);
                }
                else
                {printf("没发现匹配项");}
                break;
            case 3:
                Linklist_input(&L);
                break;
            case 4:
                printf("你要插入在哪个位置?:");
                scanf("%d",&input);
                Linklist_insert(&L,input);
                break;
            case 5:
                printf("你要删除第几个元素?:");
                scanf("%d",&input);
                Linklist_free(L,input);
                break;
            case 6:
                printf("【表长为:%d】",Linklist_length(L));
                break;
            case 7:
                print_Linklist(L);
                break;
            case 8:
                Linklist_go_die(&L);
                exit(0);
            default:
                break;
        }
    }
    return 0;
}

 

转载于:https://www.cnblogs.com/tao-zhu-forever/p/8866178.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值