#include"stdio.h" #include <iostream> #include <malloc.h> #include<windows.h> using namespace std; typedef struct employee { int no; char name[10]; int depno; float salary; } Worker; typedef struct node { Worker data; struct node *next; } WorkerList; static void destroy_employee( WorkerList *&L) { WorkerList *pre = L; WorkerList *p = pre->next; while(p != NULL) { free(pre); pre = p; p = p->next; } free(pre); } static void delete_all( WorkerList *&L) { FILE *fp = NULL; fp = fopen("emp.dat", "wb"); if(fp == NULL) { cout<<"不能打开职工文件\n\n\n"; return; } fclose(fp); destroy_employee(L); L = ( WorkerList *)malloc(sizeof( WorkerList)); L->next = NULL; cout<<"职工数据清除完毕\n\n\n"; } static void read_file( WorkerList *&L) { FILE *fp; Worker emp; WorkerList *p; WorkerList *r; int n = 0; L = ( WorkerList *)malloc(sizeof( WorkerList)); r = L; if((fp = fopen("emp.dat", "rb")) == NULL) { if((fp = fopen("emp.dat", "wb")) == NULL) { cout<<"不能创建emp.dat文件\n\n\n"; } } else { while(fread(&emp, sizeof( Worker), 1, fp) == 1) { p = ( WorkerList *)malloc(sizeof( WorkerList)); p->data = emp; r->next = p; r = p; n++; } } r->next = NULL; cout<<"职工单链表L建立完毕,有"<<n<<"个记录\n"; fclose(fp); } static void display_employee( WorkerList *L) { WorkerList *p = L->next; if(p == NULL) { cout<<"没有任何职工记录\n"; } else { cout<<" 职工号 姓名 部门号 薪水\n"; printf(" ----------------------------------------------\n"); while(p != NULL) { printf(" %3d %10s %-8d %7.2f\n", p->data.no, p->data.name, p->data.depno, p->data.salary); p = p->next; } cout<<" ------------------------把这段代码用自然语言描述
时间: 2024-04-06 20:29:32 浏览: 56
这段代码是一个职工管理系统,使用了链表来存储职工的信息。其中定义了一个职工结构体,包括职工号、姓名、部门号和薪水。另外还定义了一个链表结构体,包括职工信息和指向下一个节点的指针。代码中实现了一些功能,如清除所有职工信息、读取职工信息文件、显示职工信息等。其中,读取职工信息文件的函数会遍历文件中的每一个职工信息,将其存储在链表中,并计算出链表中职工信息的数量。最后,显示职工信息的函数会将链表中的职工信息逐一输出。
相关问题
解释代码(#include<stdio.h> #include<string.h> #include<malloc.h> #include <stdlib.h> #include<iostream> using namespace std; #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef int Status; typedef int Boolean; typedef char TElemType; #define MaxInt 32767 #define MVNum 100 typedef char VerTexType; typedef int ArcType; typedef struct { VerTexType vex[MVNum];//顶点表 ArcType arcs[MVNum][MVNum];//邻接矩阵 int vexnum,arcnum;//图的当前点数和边数 }AMGraph; struct { VerTexType Head;//边的始点 VerTexType Tail;//边的终点 ArcType lowcost;//边上的权值 }Edge[MVNum]; int LocateVex(AMGraph &G,VerTexType u) {//存在则返回u在顶点表中的下标;否则返回-1 int i; for(i=0;i<G.vexnum;++i) if(u==G.vex[i]) return i; //return -1; } Status CreatUDN(AMGraph &G)//创建图 { printf("请输入顶点和边数:\n"); cin>>G.vexnum>>G.arcnum; cout<<"请输入顶点:\n"; for(int i=0;i<G.vexnum;i++) cin>>G.vex[i]; for(int i=0;i<G.vexnum;i++) { for(int j=0;j<G.vexnum;j++) G.arcs[i][j]=MaxInt; })
这段代码是关于图的邻接矩阵存储结构的实现。包含了一些头文件和宏定义。其中,typedef用于定义新的数据类型,Status和Boolean都是int类型的,TElemType是char类型的,分别用于表示状态、布尔值和图中节点的数据类型。宏定义中,TRUE和FALSE分别表示1和0,OK和ERROR分别表示操作成功和失败,OVERFLOW表示溢出。AMGraph结构体包含了图的顶点表和邻接矩阵,以及当前点数和边数。Edge数组存储了边的始点、终点和权值。LocateVex函数用于查找节点在顶点表中的下标,如果不存在则返回-1。CreatUDN函数用于创建无向图,首先输入顶点和边数,然后输入每个节点的数据,初始化邻接矩阵的值为MaxInt表示没有边相连。
续写下列代码 #include <iostream> #include <stdio.h> #include <malloc.h> #define EQ(a,b) ((a)==(b)) #define LT(a,b) ((a)<(b)) #define LQ(a,b) ((a)<=(b)) typedef int Elemtype; typedef int KeyType; using namespace std; typedef struct { KeyType key; } SElemtype; typedef struct { SElemtype *elem; int length; } SStable; void creatSStable(SStable &T) { int i; // cout <<"请输入顺序表的长度:"; cin >>T.length; // cout<<"请输入顺序表的数据:" ; T.elem=(SElemtype*)malloc((T.length+1)*sizeof(KeyType)); for (i=1; i<=T.length; i++) cin >>T.elem[i].key; } /////////////////////////3)实现直接插入排序算法。 void InsertSort (SStable &L) {
int i, j;
for (i = 2; i <= L.length; i++) {
if (LT(L.elem[i].key, L.elem[i - 1].key)) {
L.elem[0] = L.elem[i];
L.elem[i] = L.elem[i - 1];
for (j = i - 2; LT(L.elem[0].key, L.elem[j].key); j--) {
L.elem[j + 1] = L.elem[j];
}
L.elem[j + 1] = L.elem[0];
}
}
}
int main() {
SStable T;
creatSStable(T);
InsertSort(T);
cout << "排序后的结果为:" << endl;
for (int i = 1; i <= T.length; i++) {
cout << T.elem[i].key << " ";
}
cout << endl;
return 0;
}
阅读全文