• 链表排序


      1 #include "stdio.h"
      2 #include "stdlib.h"
      3 #include "malloc.h"
      4 
      5 const int maxlen=1000;//线性表的最大长度
      6 typedef char type;
      7 
      8 struct Data{
      9     char name[20];//职工的姓名
     10     int num;//职工的编号
     11     float basic;//职工的基本工资
     12     float add;//职工的附加工资
     13     float sub;//职工的扣除工资
     14     float tall;//职工的总工资
     15 };
     16 //-------------链表------------------
     17 struct link_list
     18 {
     19     Data data;
     20     link_list *next;
     21 };
     22 
     23 /*创建链表*/
     24 link_list *Create_list(link_list *head)
     25 {
     26     head = (link_list *)malloc(sizeof link_list);//分配存储区域
     27     if(head==NULL)
     28     {
     29         printf("setup fail
    ");
     30 
     31         exit(0);
     32     }
     33     head->data.name[0]='0';//表头结点的 数据区域置空
     34     head->data.num=0;//表头结点的 数据区域置空
     35     head->data.basic =0;   //初始为0基本工资
     36     head->data.add = 0;    //附加工资初始为0
     37     head->data.sub = 0;    //扣除工资初始为0
     38     head->data.tall = 0;    //总工资初始为0
     39     head->next=NULL;
     40     return head;
     41 }
     42 
     43 /*向链表中插入一个元素(插在链表的最后面)*/
     44 void Insert_list(link_list *head,Data data)
     45 {
     46     link_list *q=NULL;
     47     link_list *p=NULL;
     48     link_list *s=NULL;
     49     q=head;//头结点
     50     p=q->next;
     51     while(p!=NULL)//找到尾指针
     52     {
     53         q=p;
     54         p=q->next;
     55     }
     56     s=(link_list *)malloc(sizeof link_list);//分配存储区域
     57     s->data = data;
     58     q->next=s;
     59     s->next=p;
     60 }
     61 
     62 void compute(link_list *head)//计算每个职工的总工资
     63 {
     64     link_list *q=NULL;
     65     q=head->next;
     66     while(q!=NULL)
     67     {
     68         q->data.tall =q->data.basic + q->data.add  -q->data.sub;
     69         q=q->next;
     70     }
     71 }
     72 
     73 void Look(link_list *head)//查看所有职工信息
     74 {
     75     int i;
     76     link_list *q=NULL;
     77     q=head->next;
     78     printf("                         <全部职工信息如下>                             
    ");
     79     printf("------------------------------------------------------------------------
    ");
     80     printf("|姓名|	|编号|	|基本工资|	附加工资|	|扣除工资|	|总工资|
    ");
     81     printf("------------------------------------------------------------------------
    ");
     82     
     83     while(q!=NULL)
     84     {
     85         for(i=0;q->data.name[i]!='';i++)
     86         {
     87             printf("%c",q->data.name[i]);
     88         }
     89         printf("	%d	%.2f		%.2f		%.2f		%.2f
    ",q->data.num,q->data.basic,q->data.add,q->data.sub,q->data.tall);
     90         q=q->next;
     91     }
     92     printf("-------------------------<全部职工信息如上>-----------------------------
    ");
     93 }
     94 
     95 link_list *sort(link_list *head)//冒泡排序
     96 {
     97     link_list *p,*p1,*p2,*p3;
     98     link_list h, t;
     99     if (head == NULL) return NULL;
    100     h.next=head;
    101     p=&h;
    102     while (p->next!=NULL)
    103     {
    104         p=p->next;
    105     }
    106     p=p->next=&t;
    107     while (p!=h.next)
    108     {
    109         p3=&h;
    110         p1=p3->next;
    111         p2=p1->next;
    112         while (p2!=p) 
    113         {
    114             if ((p1->data.num)>(p2->data.num))
    115             {
    116                 p1->next=p2->next;
    117                 p2->next=p1;
    118                 p3->next=p2;
    119 
    120                 p3=p2; 
    121                 p2=p1->next;
    122 
    123             } else {
    124                 p3=p1;
    125                 p1=p2;
    126                 p2=p2->next;
    127             }
    128         }
    129         p=p1;
    130     }
    131     while (p->next!=&t)
    132     {
    133         p=p->next;
    134     }
    135     p->next=NULL;
    136     return h.next;
    137 }
    138 void show(link_list *p,int num)//显示p结点的所有信息
    139 {
    140     int i;
    141     printf("-------------------------[编号[%d]职工信息如下]-----------------------
    
    ",num); 
    142     printf("------------------------------------------------------------------------
    ");
    143     printf("|姓名|	|编号|	|基本工资|	附加工资|	|扣除工资|	|总工资|
    ");
    144     printf("------------------------------------------------------------------------
    ");
    145     for(i=0;p->data.name[i]!='';i++)
    146     {
    147         printf("%c",p->data.name[i]);
    148     }
    149     printf("	%d	%.2f		%.2f		%.2f		%.2f
    ",p->data.num,p->data.basic,p->data.add,p->data.sub,p->data.tall);
    150     printf("-------------------------[编号[%d]职工信息如上]-----------------------
    
    ",num);
    151 }
    152 
    153 void search(link_list *p,int num)  //按编号num查找职工信息
    154 {
    155     link_list *head=p;
    156     printf("--------------------------<查看编号为[%d]的全部信息>-----------------
    ",num); 
    157     if(p==NULL)
    158     {
    159         printf("--------------------------[该链表为空链表]----------------------------
    "); 
    160         printf("-------------------------[编号[%d]的职工不存在]-----------------------
    ",num); 
    161     }
    162     else if(num==(p->data.num))   
    163     {
    164         show(p,num);
    165     } else while(p!=NULL){
    166         p=p->next;
    167         if(p==NULL){
    168             printf("-------------------------[该链表为空链表]-----------------------------
    "); 
    169             printf("-------------------------[编号[%d]的职工不存在]-----------------------
    ",num); 
    170             break;
    171         }if(num==(p->data.num))    
    172         {
    173             show(p,num);
    174             break;
    175         }
    176     } 
    177     p=head;
    178 } 
    179 
    180 void insert(link_list *head)//链表尾部插入新的职工信息
    181 {
    182     int i;
    183     Data data;
    184     char name[20];
    185     int num;
    186     float basic;
    187     float add;
    188     float sub;
    189     printf("      ------------------------------------
    ");
    190     printf("     |---------------插入职工信息---------|
    ");
    191     printf("      请输入职工姓名[字符串]:");
    192     scanf("%s",&name);
    193     printf("      请输入职工编号[整数]:");
    194     scanf("%d",&num);
    195     printf("      请输入基本工资[浮点数]:");
    196     scanf("%f",&basic);
    197     printf("      请输入附加工资[浮点数]:");
    198     scanf("%f",&add);
    199     printf("      请输入扣除工资[浮点数]:");
    200     scanf("%f",&sub);
    201     for(i=0;name[i]!='';i++)
    202     {
    203          data.name[i] = name[i];
    204     }
    205     data.name[i] ='';//结束
    206     data.num = num;//编号
    207     data.basic = basic;//基本工资
    208     data.add = add;//附加工资
    209     data.sub = sub;//扣除工资
    210     data.tall = 0;//扣除工资
    211     Insert_list(head,data);//插入职工基本信息
    212     printf("     |-----------职工信息插入成功---------|
    ");
    213     printf("      ------------------------------------
    ");
    214 }
    215 
    216 int  main()
    217 {
    218      link_list* we;
    219     link_list *head = NULL;
    220     link_list *s = NULL;/*接收指针 case3的指针接收*/
    221     head=Create_list(head);
    222     int select;
    223     do{
    224         printf("      ----------------[菜单]--------------
    ");
    225         printf("     |--------1:插入职工信息--------------|
    ");
    226         printf("     |--------2:计算职工总工资------------|
    ");
    227         printf("     |--------3:职工编号(升序)---------- |
    ");
    228         printf("     |--------4:查找[按职工编号]----------|
    ");
    229         printf("     |--------5:查看全部职工信息----------|
    ");
    230         printf("     |--------6:退出----------------------|
    ");
    231         printf("      ------------------------------------
    ");
    232         printf("您的选择是:");
    233         scanf("%d",&select);
    234         while(select!=1&&select!=2&&select!=3&&select!=4&&select!=5&&select!=6)
    235         {
    236             printf("您输入有误,请重新输入:");
    237             scanf("%d",&select);
    238         }
    239         switch(select)
    240         {
    241         case 1:
    242              insert(head);//插入信息职工信息
    243              break;
    244         case 2:
    245             compute(head);//计算职工总工资
    246             Look(head);
    247             break;
    248         case 3:
    249             
    250             we = sort(head);
    251             Look(we);
    252             break;
    253         case 4:
    254             printf("查询的职工编号:");
    255             scanf("%d",&select);
    256             search(head,select);
    257             break;
    258         case 5:
    259             Look(head);
    260             break;
    261         default:
    262             exit(0);
    263             break;
    264         }
    265         printf("
    ");
    266         printf("      ------------------------------------
    ");
    267         printf("     |--------1:继续操作------------------|
    ");
    268         printf("     |--------0:退出----------------------|
    ");
    269         printf("      ------------------------------------
    ");
    270         printf("您的选择是:");
    271         scanf("%d",&select);
    272         while(select!=1&&select!=0)
    273         {
    274             printf("您输入有误,请重新输入:");
    275             scanf("%d",&select);
    276         }
    277     }while(select==1);
    278     
    279     return 0;
    280 }
  • 相关阅读:
    js学习笔记之标准库
    js学习笔记
    html5学习
    C#调用win32 api程序实例
    javascript计算字符串中出现最多的字符和个数
    javascript中的promise和deferred:实践(二)
    jquery animate 详解
    jquery animate stop函数解析
    javascript继承的写法
    css3 改变滚动条样式
  • 原文地址:https://www.cnblogs.com/minmsy/p/5093109.html
Copyright © 2020-2023  润新知