📄 4-4-9.c
字号:
/*中国系统分析员顾问团,http://www.csai.cn*/
/*程序员下午考试指南书籍源码*/
#include <stdio.h>
#include <malloc.h>
typedef struct ELE{
int no; /*职工工号*/
int num; /*完成的产品总数*/
struct ELE *next;
}ELEM;
ELEM *proc(FILE *fp){
int m,n;
ELEM *u,*v,*p,*base;
base = NULL; /*base是链表的首指针*/
while(fscanf(fp,"%d%d",&n,&m) == 2){ /*链表中是否存在工号为n的结点*/
for(v = base; v != NULL && v->no != n; u = v,v = v->next);
if(v != NULL) {/*若链表中已有工号为n的结点v,则将其从链表中脱钩*/
if(v == base ) base = v->next;
else u->next = v->next;
v->num += m; /*累加工号为n的职工完成的产品数量*/
}
else { /*创建一个工号为n的结点*/
v = (ELEM *)malloc(sizeof(ELEM));
v->no = n; v->num = m;
}
/* 寻找结点v的插入位置*/
p = base;
while(p != NULL)
if(v->num > p->num || v->num == p->num && v->no < p->no) break;
else {
u = p;
p = p->next;
}
/* 将结点v插入链表*/
if(p == base) base = v;
else u->next = v;
v->next = p;
}
return base;
}
main(){
FILE *fp;
ELEM *head;
fp=fopen("work.txt","r");
if (fp)
{head=proc(fp);
printf(" 工号 完成产品数量\n");
}
else
printf("Can't open file!");
while(head)
{
printf(" %5d ",head->no);
printf(" %10d \n",head->num);
head=head->next;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -