ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

【C语言】构建新生的学籍卡管理程序。学籍卡内容包括:学号、姓名、性别、专业等内容。

2020-10-25 20:32:03  阅读:586  来源: 互联网

标签:head 管理程序 Slink next strcpy firstNode id C语言 学籍


题目(数据结构测试)

代码:

#include<stdio.h>
#include<malloc.h>
#include<string.h>

#define MAX 50
/*创建一个学生表结构体*/
typedef struct student_node
{
    unsigned id;
    char name[MAX];
    char sex[MAX];
    char major[MAX];
    struct student_node *next;
}Slink;

/*创建一个有n个学生带头结点的单链表*/
Slink *CreateSlink(int n)
{
    Slink *head,*p,*s;
    int i;
    p = head = (Slink *)malloc(sizeof(Slink));    //创建头结点
    printf("请输入%d个学生的学籍信息:\n",n);
    for(i = 0;i < n;i++)
    {
        s = (Slink *)malloc(sizeof(Slink));
        printf("**********请输入学号**********\n");
        scanf("%u",&s->id);    
        printf("**********请输入姓名**********\n");
        getchar();                               //消除scanf函数不接收的 回车符(\n)
       gets(s->name);                           //name中可以包含空格
        printf("**********请输入性别**********\n");
        scanf("%s",&s->sex);
        printf("**********请输入专业**********\n");
        scanf("%s",&s->major);

        p->next = s;                        //将新结点s插入链表的尾结点
        p = s;                                //修改尾指针指向 p 指向当前的尾结点 s
    }
    p->next = NULL;
  return head;
}
/*在单链表中按照学号顺序重新调整结点的顺序,形成一个新的链表*/
void BubbleSort(Slink *head)
{
    Slink *firstNode = head->next;
    Slink *secondNode = head;
    char temp[1024];
    while(firstNode != NULL)
    {
        while(firstNode->next != NULL)
        {
            if(firstNode->id > firstNode->next->id)
            {
                int t = firstNode->id;
                firstNode->id = firstNode->next->id;
                firstNode->next->id = t;    
                //交换姓名
                strcpy(temp,firstNode->name);
                strcpy(firstNode->name,firstNode->next->name);
                strcpy(firstNode->next->name,temp);
                //交换性别
                strcpy(temp,firstNode->sex);
                strcpy(firstNode->sex,firstNode->next->sex);
                strcpy(firstNode->next->sex,temp);
                //交换专业
                strcpy(temp,firstNode->major);
                strcpy(firstNode->major,firstNode->next->major);
                strcpy(firstNode->next->major,temp);

            }
            firstNode = firstNode->next;
        }
        firstNode = secondNode->next;
        secondNode = firstNode;
    }
}
/*输出按学号从小到大排序后的结果*/
void display(Slink *head)
{
    Slink *p;
    p = head->next; /*从第一个实际结点开始*/
    if(!p)
    {
        printf("\n带头结点的单链表是空的!");
    }
    else
    {
        printf("\n新生登记卡按学号排序后的表为:\n");
        while(p)
        {
            printf("%u  %s   %s  %s\n",p->id,p->name,p->sex,p->major);
            p = p->next;
        }
    }
}
int main()
{
    Slink *head = CreateSlink(3);
    BubbleSort(head);
    display(head);
}

 运行结果

 

标签:head,管理程序,Slink,next,strcpy,firstNode,id,C语言,学籍
来源: https://www.cnblogs.com/HGNET/p/13875005.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有