数据结构实验二 链式存储结构----单向链表的有关操作(学生成绩信息C语言)

建立一个学生成绩信息(包括学号、姓名、成绩)的单向链表,学生记录按学号由小到大顺序排列,要求实现对成绩信息的插入、修改、删除和遍历操作。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct stud_node{
    char num[50];
    char name[20];
    int score;
    struct stud_node *next;
}LNode,*LinkList;

int InitList(LinkList &L)                //初始化
{
    L=new LNode;
    L->next =NULL;
    printf("初始化成功!\n\n");
}

int CreateList(LinkList &L)
{
    int n,i;
    LNode *r,*p;
    r=L;
    printf("请输入要添加的成绩人数:");
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        p=new LNode;
        printf("学号:");
        scanf("%s",p->num);
        printf("姓名:");
        scanf("%s",p->name);
        printf("成绩:");
        scanf("%d",&p->score);
        p->next=NULL;
        r->next=p;
        r=p;
    }
    printf("\n");
}

int ListInsert(LinkList &L)             //插入
{
    int j=0,i;
    LNode *s,*p;
    p=L;
    printf("请输入要插入的位置:");
    scanf("%d",&i);
    while(p&&j<i-1)
    {
        p=p->next;
        ++j;
    }
    if(!p||j>i-1)
        return 0;
    s=new LNode;
    printf("学号:");
    scanf("%s",s->num);
    printf("姓名:");
    scanf("%s",s->name);
    printf("成绩:");
    scanf("%d",&s->score);
    s->next=p->next;
    p->next=s;
    printf("\n");
}

int LocateELem(LinkList L)           //查找
{
    int flag=0;
    char a[10];
    LNode *p;
    p=L->next;
    printf("请输入要查找的名字:");
    scanf("%s",a);
    while(p)
    {
        if(strcmp(p->name,a)==0)
        {
            flag=1;
            break;
        }
        p=p->next;
    }
    if(flag==1)
    {
        printf("学号\t姓名\t成绩\n");
        printf("%s\t%s\t%d\n\n",p->num,p->name,p->score);
    }
    else
        printf("没有找到这个学生!\n\n");
}

int ListDelete(LinkList &L)       //删除
{
    int i,j=0;
    LNode *p,*q;
    p=L;
    printf("请输入要删除的位置:");
    scanf("%d",&i);
    while((p->next)&&(j<i-1))
    {
        p=p->next;
        ++j;
    }
    if((!p->next)||(j>i-1))
        return 0;
    q=p->next;
    p->next=q->next;
    delete q;
}

int ListPrintf(LinkList L)           //输出
{
    LNode *p,*s,*t;
    char num[10],name[50];
    int score;
    p=L->next;
    if(p==NULL)
    {
        printf("该链表为空!\n\n");
        return 0;
    }
    printf("学号\t姓名\t成绩\n");
    while(p)
    {
        s=p->next;
        while(s)
        {
            t=s;
            if(strcmp(p->num,t->num)>0)
            {
                strcpy(num,p->num);
                strcpy(p->num,t->num);
                strcpy(t->num,num);
                strcpy(name,p->name);
                strcpy(p->name,t->name);
                strcpy(t->name,name);
                score=p->score;
                p->score=t->score;
                t->score=score;
            }
            s=s->next;
        }
        p=p->next;
    }
    p=L->next;
    while(p)
    {
        
        printf("%s\t%s\t%d\n",p->num,p->name,p->score);
        p=p->next;
    }
    printf("\n");
}

int main()
{
    int i;
    LinkList L;
    while (1)
    {
        printf("1.初始化\n2.添加\n3.插入\n4.查找\n5.删除\n6.排序输出\n其他退出\n");
        printf("请输入你的选择:");
        scanf("%d",&i);
        switch (i)
        {
            case 1:
                InitList(L);
                break;
            case 2:
                CreateList(L);
                break;
            case 3:
                ListInsert(L);
                break;
            case 4:
                LocateELem(L);
                break;
            case 5:
                ListDelete(L);
                break;
            case 6:
                ListPrintf(L);
                break;
            default:
                exit(0);
        }
    }
}


发布了11 篇原创文章 · 获赞 26 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_37915248/article/details/72856602
今日推荐