链表构建学生信息库

链表构建学生信息库,第1张

//链表构建学生信息
#include
#include
#include

struct stud_node{

    int num;
    char name[10];
    int score;
    struct stud_node *next;
};

struct  stud_node *Create_Stu_Doc();//新建链表
struct stud_node *InsertDoc(struct stud_node *head,struct stud_node *stud);//插入
struct stud_node *DeleteDoc(struct stud_node *head,int num);//删除
void Print_Stu_Doc(struct stud_node *head);//遍历

int main()
{
    struct stud_node *head,*p;
    int choice,num,score;
    char name[20];
    int size=sizeof(struct stud_node);
    do{
        printf("1:新建  2:插入  3:删除   4:遍历  0:退出\n");
        scanf("%d",&choice);
        switch(choice){
        case 1:
            head=Create_Stu_Doc();
            break;
        case 2:
            printf("请输入学号,姓名,分数:\n");
            scanf("%d%s%d",&num,name,&score);
            p=(struct stud_node*)malloc(size);
            p->num=num;
            strcpy(p->name,name);
            p->score=score;
            head=InsertDoc(head,p);
            break;
        case 3:
            printf("输入学号:\n");
            scanf("%d",&num);
            head=DeleteDoc(head,num);
            break;
        case 4:
            Print_Stu_Doc(head);
            break;
        case 0:
            break;
       

        }

    }
    while(choice!=0);
    return 0;
}

//新建链表
struct stud_node *Create_Stu_Doc()
{
    struct stud_node*head,*p;
    int num,score;
    char name[20];
    int size=sizeof(struct stud_node);

    head=NULL;
    printf("请输入学号,姓名,分数:\n");
    scanf("%d%s%d",&num,name,&score);
    while(num!=0){
        p=(struct stud_node*)malloc(size);
        p->num=num;
        strcpy(p->name,name);
        p->score=score;
        head=InsertDoc(head,p);
        scanf("%d%s%d",&num,name,&score);
    }
    return head;
}

struct stud_node *InsertDoc(struct stud_node *head,struct stud_node *stud)//插入
{
    struct stud_node*ptr,*ptr1,*ptr2;
    ptr2=head;
    ptr=stud;
    if(head==NULL){
        head=ptr;
        head->next=NULL;

    }
    else{
        while((ptr->num>ptr2->num)&&(ptr2->next!=NULL)){
            ptr1=ptr2;
            ptr2=ptr2->next;

        }
        if(ptr->num<=ptr2->num){
            if(head==ptr2)  head=ptr;
            else ptr1->next=ptr;
            ptr->next=ptr2;
        }
        else{
            ptr2->next=ptr;
            ptr->next=NULL;
        }
    }
    return head;
}

struct stud_node *DeleteDoc(struct stud_node *head,int num)//删除
{

    struct stud_node*ptr,*ptr1,*ptr2;
    while(head!=NULL&&head->num==num){
        ptr2=head;
        head=head->next;
        free(ptr2);

    }
    if(head==NULL)
        return NULL;
    ptr1=head;
    ptr2=head->next;
    while(ptr2!=NULL){
        if(ptr2->num==num){
            ptr1->next=ptr2->next;
            free(ptr2);
        }
        else
            ptr1=ptr2;
        ptr2=ptr1->next;
    }
    return head;

}
void Print_Stu_Doc(struct stud_node *head)//遍历
{
    struct stud_node *ptr;
    if(head==NULL)
    {
        printf("\nNo Records\n");
        return;
    }
    printf("\nThe Students' Records Are:\n");
    printf("Num\tName\tScore\n");
    for(ptr=head;ptr!=NULL;ptr=ptr->next)
        printf("%d\t%s\t%d\n",ptr->num,ptr->name,ptr->score);
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/675034.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-19
下一篇 2022-04-19

发表评论

登录后才能评论

评论列表(0条)

保存