zoukankan      html  css  js  c++  java
  • 链表排序

      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 }
  • 相关阅读:
    数据绑定表达式语法(Eval,Bind区别)
    使用博客园的第一件事 自定义主题
    sql2000 跨服务器复制表数据
    使用UpdatePanel 局部刷新出现中文乱码的解决方法!!
    MMC不能打开文件MSC文件
    sql 日期 、时间相关
    loaded AS2 swf call function in AS3 holder
    Rewrite the master page form action attribute in asp.net 2.0
    100万个不重复的8位的随机数
    flash 中实现斜切变型
  • 原文地址:https://www.cnblogs.com/minmsy/p/5093109.html
Copyright © 2011-2022 走看看