mr_mir 2016-06-04 16:29 采纳率: 0%
浏览 1370

单链表排序,不知道怎么改,求大神指导下

做了个职工管理系统,卡在排序那儿了,交换地址频频出错,只能改成交换数据域。。然而还是错的,求大神帮忙看看,谢谢!!!

头文件:
#include
#include
#include
#include

typedef struct worker{
char worker_number[10];
char worker_name[10];
char worker_sex[3];
char adm_number[5];
char position[10];
char major[20];
int salary;
char tel_number[20];
struct worker *next;
}worker;

#define null 0

int menu_select();
worker *input();
void display(struct worker *);
worker *add(struct worker *);
void account(struct worker *);
void total(struct worker *);
worker *delete_worker(worker *);
void bubble_sort(struct worker *);
void search(struct worker *);

排序函数:
#include "1.h"

void bubble_sort(struct worker *list)
{
int i,j,len=0;
worker *p1,*p2,*p3,*p4;
p2=(struct worker *)malloc(sizeof(worker));
p3=(struct worker *)malloc(sizeof(worker));
p4=(struct worker *)malloc(sizeof(worker));
p1=list->next;
p2=list->next;
p3=list->next->next;
p4=NULL;

while(p1)
{
    p1=p1->next;
    len++;
}

printf("有%d条记录!\n",len);

switch(len)
{
 case 0:
    printf("该表中无任何职工记录!\n");
    break;
 case 1:
     printf("该表中只有1条记录!\n");
     display(list);
     break;
 default :
     for(i=0;i<len;i++)
    {


        for(j=0;j<len-1;j++)
        {

            if( p2->salary < p3->salary )
            {

                strcpy(p4->worker_number,p2->worker_number);
                strcpy(p4->worker_name,p2->worker_name);
                strcpy(p4->worker_sex,p2->worker_sex);
                strcpy(p4->tel_number,p2->tel_number);
                p4->salary=p2->salary;
                strcpy(p4->position,p2->position);
                strcpy(p4->major,p2->major);
                strcpy(p4->adm_number,p2->adm_number);

                strcpy(p2->worker_number,p3->worker_number);
                strcpy(p2->worker_name,p3->worker_name);
                strcpy(p2->worker_sex,p3->worker_sex);
                strcpy(p2->tel_number,p3->tel_number);
                p2->salary=p3->salary;
                strcpy(p2->position,p3->position);
                strcpy(p2->major,p3->major);
                strcpy(p2->adm_number,p3->adm_number);

                strcpy(p3->worker_number,p4->worker_number);
                strcpy(p3->worker_name,p4->worker_name);
                strcpy(p3->worker_sex,p4->worker_sex);
                strcpy(p3->tel_number,p4->tel_number);
                p3->salary=p4->salary;
                strcpy(p3->position,p4->position);
                strcpy(p3->major,p4->major);
                strcpy(p3->adm_number,p4->adm_number);

            }
                p3=p3->next;
        }
        p2=p2->next;
     }
     printf("比较结束!\n");
     display(list);
     break;
}

}

  • 写回答

3条回答 默认 最新

  • mr_mir 2016-06-04 16:30
    关注

    补充下:
    输入函数:带头结点的
    #include "1.h"

    worker *input()
    {

    int n=0;
    worker *p1,*head,*tail,*p2;
    head=(struct worker *)malloc(sizeof(worker));
    if(head==NULL)
    {
    printf("分配是空间失败!\n");
    exit(-1);
    }
    else
    {
    head->next=NULL;
    printf("带有头结点的链表已建立!\n");
    tail=head;
    do
    {
    p1=(struct worker *)malloc(sizeof(worker));
    if(p1==NULL)
    {
    printf("分配空间失败!\n");
    exit(-1);
    }
    else
    {
    printf(" ----------------------------\n");
    printf("| 二级部门相关信息如下 |\n");
    printf("| 人事部 |\n");
    printf("| 财务部 |\n");
    printf("| 学工办 |\n");
    printf("| 宣传部 |\n");
    printf("| 教工部 |\n");
    printf(" ----------------------------\n");
    printf("当输入职工号为0时,输入结束!\n");
    printf("请输入对应项目职工信息!\n");
    printf("职工号:");
    scanf("%s",p1->worker_number);
    if(strcmp(p1->worker_number,"0")==0)
    break;
    else
    {
    p2=head;
    while(p2)
    {
    if(strcmp(p2->worker_number,p1->worker_number)==0)
    {
    printf("\n该职工号:%s已存在,请重新输入!\n",p1->worker_number);
    printf("职工号:");

    scanf("%s",p1->worker_number);
    if(strcmp(p1->worker_number,"0")==0)
    goto loop;
    }
    else p2=p2->next;
    }
    }
    printf("职工姓名:");
    scanf("%s",p1->worker_name);
    printf("职工性别:");
    scanf("%s",p1->worker_sex);
    printf("二级单位编号:");
    scanf("%s",p1->adm_number );
    printf("职工职称:");
    scanf("%s",p1->position);
    printf("职工所学专业:");
    scanf("%s",p1->major);
    printf("职工月工资:");
    scanf("%d",&p1->salary);
    printf("职工联系方式:");
    scanf("%s",p1->tel_number);
    getchar();

                   p1->next=NULL;
                   tail->next=p1;
                   tail=p1;
                   n++;
               }
           }while(strcmp(p1->worker_number,"0")>0);
    

    loop: printf("\n职工信息输入结束,本次输入%d条记录!\n",n);
    return (head);
    }
    }

    评论

报告相同问题?

悬赏问题

  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况
  • ¥15 画两个图 python或R
  • ¥15 在线请求openmv与pixhawk 实现实时目标跟踪的具体通讯方法
  • ¥15 八路抢答器设计出现故障
  • ¥15 opencv 无法读取视频
  • ¥15 按键修改电子时钟,C51单片机
  • ¥60 Java中实现如何实现张量类,并用于图像处理(不运用其他科学计算库和图像处理库))