第一篇:C语言链表的概念
C语言链表的概念
在*中采用了动态分配的办法为一个结构分配内存空间。每一次分配一块空间可用来存放一个学生的数据,我们可称之为一个结点。有多少个学生就应该申请分配多少块内存空间,也就是说要建立多少个结点。当然用结构数组也可以完成上述工作,但如果预先不能准确把握学生人数,也现金网96y.org就无法确定数组大小。而且当学生留级、退学之后也不能把该元素占用的空间从数组中释放出来。
用动态存储的方法可以很好地解决这些问题。有一个学生就分配一个结点,无须预先确定学生的准确人数,某学生退学,可删去该结点,并释放该结点占用的存储空间。从而节约了宝贵的内存资源。另一方面,用数组的方法必须占用一块连续的内存区域。而使用动态分配时,每个结点之间可以是不连续的(结点内是连续的)。结点之间的联系可以用指针实现。即在结点结构中定义一个成员项用来存放下一结点的首地址,这个用于存放地址的成员,常把它称为指针域。
可在第一个结点的指针域内存入第二个结点的首地址,在第二个结点的指针域内又存放第三个结点的首地址,如此串连下去直到最后一个结点。最后一个结点因无后续结点连接,其指针域可赋为0。这样一种连接方式,在数据结构中称为链表。
下图为最一简单链表的示意图。
图中,第0个结点称为头结点,它存放有第一个结点的首地址,它没有数据,只是一个指针变量。以下的每个结点都分为两个域,一个是数据域,存放各种实际的数据,如学号num,姓名name,性别sex和成绩score等。另一个域为指针域,存放下一结点的首地址。链表中的每一个结点都是同一种结构类型。
例如,一个存放学生学号和成绩的结点应为以下结构:
struct stu{
int num;
int score;
struct stu *next;
} 前两个成员项博彩娱乐棋牌q07i5.org组成数据域,后一个成员项next构成指针域,它是一个指向stu类型结构的指针变量。
链表的基本操作对链表的主要操作有以下几种:
建立链表;
结构的查找与输出;
插入一个结点;
删除一个结点。
第二篇:C语言用指针和链表读写文件
#include
#include
#include
#include
#define MAXLEN_OF_KEYWORD 50
#define MAXLEN_OF_KEYWORDTYPE 30
char i,ch[5];
struct KeyWordBox
{
char Name[MAXLEN_OF_KEYWORD];
intId;
char Type[MAXLEN_OF_KEYWORDTYPE];//该单词的类型struct KeyWordBox *next;//指针
};
void write();
void read();
void main()
{
write();
read();
}
void write()
{
char *FileName=“FileName.txt”;
KeyWordBox transport;
memset(&transport,0,sizeof(struct KeyWordBox));
FILE *out=NULL;
FILE *test=NULL;
test=fopen(FileName,“a”);
if(test==NULL)
{
out=fopen(FileName,“w”);
printf(“ 1 continue,0 exitn”);
i=getchar();
while(i=='1')
{
printf(“请输入关键字n”);
scanf(“%s”,transport.Name);
printf(“请输入IDn”);
scanf(“%d”,&transport.Id);
printf(“请输入Typen”);
scanf(“%s”,transport.Type);
fwrite(&transport,sizeof(struct KeyWordBox),1,out);
printf(“ 1 continue,0 exitn”);
scanf(“%c”,&i);
}
fclose(out);
}
else
{
out=fopen(FileName,“a”);
printf(“ 1 continue,0 exitn”);
scanf(“%c”,&ch);
//i=getchar();
//while(i=='1')
while(strcmp(ch,“1”)==0)
{
printf(“请输入关键字n”);
scanf(“%s”,transport.Name);
printf(“请输入IDn”);
scanf(“%d”,&transport.Id);
printf(“请输入Typen”);
scanf(“%s”,transport.Type);
fwrite(&transport,sizeof(KeyWordBox),1,out);
printf(“ 1 continue,0 exit.n”);
scanf(“%s”,ch);
}
fclose(out);
}
}
void read()
{
char *FileName=“FileName.txt”;
KeyWordBox *Head=NULL,*q=NULL;
KeyWordBox *Body=NULL;
KeyWordBox *p=NULL;
FILE *in=NULL;
in=fopen(FileName,“r”);
if(in==NULL)
{
printf(“can't open the file!n”);
exit(0);
}
else
{
Head=(struct KeyWordBox*)malloc(sizeof(struct KeyWordBox));Head->next =NULL;
}}q=Head;while(!feof(in)){Body=(struct KeyWordBox*)malloc(sizeof(struct KeyWordBox));Body->next=NULL;fread(Body,sizeof(struct KeyWordBox),1,in);if(feof(in)){q->next=NULL;break;}q->next=Body;q=Body;printf(“%st%dt%sn”,Body->Name,Body->Id,Body->Type);} fclose(in);p=Head->next;while(p!=NULL){printf(“%st%dt%sn”,p->Name,p->Id,p->Type);p=p->next;}
第三篇:C语言概念题
2、下列叙述中错误的是_______。(标准答案:A)(A)一个C语言程序只能实现一种算法
(B)一个C函数可以单独作为一个C程序文件存在(C)C程序可以由一个或多个函数组成(D)C程序可以由多个程序文件组成
4、以下叙述中错误的是_____________。(标准答案:A)
(A)C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令(B)C语言源程序经编译后生成后缀为.obj的目标程序
(C)用C语言编写的程序称为源程序,它以ASCII代码形式存放在一个文本文件中(D)C程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件
13、以下叙述中错误的是A(A)使用三种基本结构构成的程序只能解决简单问题(B)C语言是一种结构化程序设计语言(C)结构化程序由顺序、分支、循环三种基本结构组成(D)结构化程序设计提倡模块化的设计方法
18、以下关于结构化程序设计的叙述中正确的是
(A)一个结构化程序必须同时由顺序、分支、循环三种结构组成(B)有三种基本结构构成的程序只能解决小规模的问题(C)在C语言中,程序的模块化是利用函数实现的(D)结构化程序使用goto语句会很便捷 标准答案:C
19、对于一个正常运行的C程序,以下叙述中正确的是C(A)程序的执行总是从main函数开始,在程序的最后一个函数中结束(B)程序的执行总是从程序的第一个函数开始,在main函数结束(C)程序的执行总是从main函数开始
(D)程序的执行总是从程序的第一个函数开始,在程序的最后一个函数中结束
33、以下选项中关于程序模块化的叙述错误的是
(A)把程序分成若干相对独立的模块,可便于编码和测试
(B)可采用自顶向下、逐步细化的设计方法把若干独立模块组装成所要求的程序(C)把采用分成若干相对独立、功能单一的模块,可便于重复使用这些模块
(D)可采用自顶向上、逐步细化的设计方法把若干独立模块组装成所要求的程序 标准答案:D
34、以下叙述中正确的是
(A)C程序中的注释只能出现在程序的开始位置和语句的后面(B)C程序书写格式严格,要求一行内只能写一个语句(C)用C语言编写的程序只能放在一个程序文件中(D)C程序书写格式自由,一个语句可以写在多行上 标准答案:D
36、以下关于C语言数据类型使用的叙述中错误的是(A)若只处理“真”和“假”两种逻辑值,应使用逻辑类型(B)若要保存带有多位小数的数据,可使用双精度类型(C)整数类型表示的自然数是准确无误差的
(D)若要处理“人员信息”等含有不同类型的相关数据,应自定义结构体类型
38、以下叙述中错误的是
(A)C程序在运行过程中所有计算都以二进制方式进行(B)C程序在运行过程中所有计算都以十进制方式进行
(C)C程序中字符变量存放的是字符的ASCII值(D)所有C程序都需要编译链接无误后才能运行
第四篇:单链表实验报告
《数据结构》实验报告二
分校:
学号:
日期:
班级:
姓名:
程序名: L2311.CPP
一、上机实验的问题和要求:
单链表的查找、插入与删除。设计算法,实现线性结构上的单链表的产生以及元素的查找、插入与删除。具体实现要求:
1.从键盘输入20个整数,产生带表头的单链表,并输入结点值。
2.从键盘输入1个整数,在单链表中查找该结点。若找到,则显示“找到了”;否则,则显示“找不到”。
3.从键盘输入2个整数,一个表示欲插入的位置i,另一个表示欲插入的数值x,将x插入在对应位置上,输出单链表所有结点值,观察输出结果。4.从键盘输入1个整数,表示欲删除结点的位置,输出单链表所有结点值,观察输出结果。5.将单链表中值重复的结点删除,使所得的结果表中个结点值均不相同,输出单链表所有结点值,观察输出结果。
6.删除其中所有数据值为偶数的结点,输出单链表所有结点值,观察输出结果。
7.把单链表变成带表头结点的循环链表,输出循环单链表所有结点值,观察输出结果。8.(★)将单链表分解成两个单链表A和B,使A链表中含有原链表中序号为奇数的元素,而B链表中含有原链表中序号为偶数的元素,且保持原来的相对顺序,分别输出单链表A和单链表B的所有结点值,观察输出结果。
二、程序设计的基本思想,原理和算法描述:
(包括程序的结构,数据结构,输入/输出设计,符号名说明等)
三、源程序及注释:
四、运行输出结果:
五、调试和运行程序过程中产生的问题及采取的措施:
六、对算法的程序的讨论、分析,改进设想,其它经验教训:
七、对实验方式、组织、设备、题目的意见和建议:
第五篇:职工信息管理系统 单链表实现 C语言源程序(范文)
#include
/* 单链表内容有无发生改变,是否需要存盘的标志变量 */ struct employee {
};
typedef struct Node {
void InitList(LinkList *head)
/*将单链表初始化为空。动态生成一个头结点,并将头结点的指针域置为空*/ {
}
ListNode *Locatenum(LinkList head,char find[])
//通过职工工号查找,返回定位指针。{ LinkList p;if((*head=(LinkList)malloc(sizeof(ListNode)))==NULL)
/*为头结点分配一 printf(“系统分配存储空间失败!n”);个存储空间*/ exit(-1);(*head)->next=NULL;
/*将头结点的指针域置为空*/ struct employee data;struct Node *next;char num[10];
/* 工号 */ char name[15];
/* 姓名 */ char sex[7];
/* 性别 */ int age;
/* 年龄 */ char education[15];
/* 学历 */ int salary;
/* 工资 */ char phone[20];
/* 电话号码 */ char address[30];
/* 住址 */ }ListNode,*LinkList;
} p=head->next;if(!p)
//如果职工信息记录为空,返回NULL。
{
} return NULL;if(strcmp(p->data.num,find)==0)return p;p=p->next;return NULL;while(p)ListNode *Locatename(LinkList head,char find[])
//通过职工姓名查找,返回定位指针。{
}
ListNode *Locatesalary(LinkList head,int salary)
//通过职工工资查找,返回定位指针。{
LinkList p;p=head->next;if(!p)
//如果职工信息记录为空,返回NULL。
return NULL;while(p){ LinkList p;p=head->next;if(!p)
//如果职工信息记录为空,返回NULL。
{
} return NULL;if(strcmp(p->data.name,find)==0)return p;p=p->next;return NULL;while(p)
}
} if(p->data.salary==salary)return p;p=p->next;return NULL;void Nofind(){ }
void Modify(LinkList L)
//修改功能。{
ListNode *p;
char find[20];
if(!L->next)
{
printf(“请你输入要修改的职工工号:”);
scanf(“%s”,find);
p=Locatenum(L,find);
if(p)
{
printf(“请你输入新的工号(原来是%s):”,p->data.num);
scanf(“%s”,p->data.num);
getchar();
printf(“n”);
printf(“请你输入新的姓名(原来是%s):”,p->data.name);
scanf(“%s”,p->data.name);
getchar();
printf(“n”);
printf(“n***提示***:没有资料可以修改!n”);
return;printf(“n***提示***:没有找到该职工!n”);
}
printf(“请你输入新的性别(原来是%s):”,p->data.sex);
scanf(“%s”,p->data.sex);
getchar();
printf(“n”);
printf(“请你输入新的年龄(原来是%d):”,p->data.age);
scanf(“%d”,&p->data.age);
printf(“n”);
printf(“请你输入新的学历(原来是%s):”,p->data.education);
scanf(“%s”,p->data.education);
getchar();
printf(“n”);
printf(“请你输入新的工资(原来是%d):”,p->data.salary);
scanf(“%d”,&p->data.salary);
printf(“n”);
printf(“请你输入新的电话(原来是%s):”,p->data.phone);
scanf(“%s”,p->data.phone);
getchar();
printf(“n”);
printf(“请你输入新的住址(原来是%s):”,p->data.address);
scanf(“%s”,p->data.address);
getchar();
printf(“n”);
printf(“n***提示***:资料修改成功!n”);
saveflag=1;
}
else
Nofind();//if(p)结束
} //void Modify(LinkList L)
//修改功能结束 void Add(LinkList head)
/* 录入职工信息 */ {
system(“cls”);ListNode *p,*r,*s;
/* 实现添加操作的临时的结构体指针变量 */ int sign;
/* 标记重复工号的变量 */ char num[10];r=head;s=head->next;
/* 链表没有节点时,s=NULL;链表有节点时,指向while(r->next!=NULL)/* 如果存在后继结点时,r指针后移一个 */ r=r->next;
/* 将指针移至于链表最末尾,准备添加记录 */ printf(“输入‘#’将退出职工信息录入,退回至主菜单!nn”);while(1){
printf(“(PS:职工号为‘#’即退出录入功能)nn”);printf(“请输入职工号:”);fflush(stdin);
//清除缓冲区。gets(num);if(strcmp(num,“#”)==0)/* 输入‘0’,跳出while(1),即跳出Add()函数 */ break;s=head->next;
/* 每次从第一个节点开始找,看num是否重
while(s){
if(strcmp(s->data.num,num)==0){
} s=s->next;printf(“***提示***n工号为:‘%s’的职工信息已经存在!printf(”若要修改请按‘4’,放弃请按‘0’!n“);scanf(”%d“,&sign);if(sign==4)
Modify(head);return;else 第一个职工节点 */ 复。*/ n”,num);}//while(s)if((p=(LinkList)malloc(sizeof(ListNode)))==NULL)//生成没赋值的新节点 p。
{
} strcpy(p->data.num,num);printf(“n”);printf(“请输入该职工姓名:”);scanf(“%s”,p->data.name);getchar();printf(“n”);printf(“请输入该职工的性别:(注:男性:male;女性:female)”);scanf(“%s”,p->data.sex);getchar();printf(“n”);printf(“请输入该职工的年龄:”);scanf(“%d”,&p->data.age);printf(“n”);printf(“请输入该职工的学历:”);scanf(“%s”,p->data.education);getchar();printf(“n”);printf(“请输入该职工的工资:”);scanf(“%d”,&p->data.salary);printf(“n”);printf(“请输入该职工的电话号码:”);scanf(“%s”,p->data.phone);getchar();printf(“n”);printf(“请输入该职工的住址:”);gets(p->data.address);printf(“n”);p->next=NULL;
/* 表明这是链表的尾部结点 */ r->next=p;
/* 将新建的结点加入链表尾部中 */ r=p;saveflag=1;printf(“n”);printf(“系统分配存储空间失败!n”);printf(“退出程序!n”);exit(-1);}//while(1)}//void Add函数结束。
void printline()
//打印横线。{ }
void printsubject()
//打印各分类标题。{ }
void printLinkList(LinkList p)
//打印p结点各个数据成员的值。{ printf(“ %s
%s %s
%d %s %d
%s
%sn”,p->data.num,p->data.name,p->data.sex,p->data.age,p->data.education,p->data.salary,p->data.phone,p->data.address);}
void Allemployeeinfo(LinkList head)//显示所有职工信息。{
int count=0;ListNode *p;p=head->next;if(!p){
} printf(“tttt显示结果n”);printline();printsubject();printf(“n”);while(p)printf(“***提示***:目前没有存储任何职工记录!n”);printf(“返回主菜单,请重新选择功能!n”);return;printf(“ 工 号t 姓 名
性 别
年 龄
学 历
工 资
电 话tt 住 址n”);printf(“------------------n”);
} {
} printline();printf(“n”);printf(“已经存储了%d条职工信息!n”,count);printLinkList(p);p=p->next;count++;void Wrong(){ }
void menu()
//主菜单。{
printf(“n”);printf(“t**********************************************************printf(”t*
printf(“t*
printf(”t*
< 职工信息管理系统_单链表实现 >
printf(“t*
printf(”t*
[1]
录入职工信息
[2]
删除职工信息
printf(“t*
[3]
查询职工信息
[4]
修改职工信息
printf(”t*
[5]
插入职工记录
[6]
统计职工信息
printf(“t*
[7]
排序
[8]
保存职工信息
printf(”t*
[9]
显示所有职工记录
[0]
退出系统
printf(“n***提示***:输入错误!n”);*********n“);*n”);*n“);*n”);*n“);*n”);*n“);*n”);*n“);*n”);
printf(“t*
printf(”t*
printf(“t*
版权所有人:printf(”t*
电子132班
printf(“t*
printf(”t***********************************************************n“);*n”);彭林
*n“);*n”);1319200063
*n“);*********n”);} //void menu菜单结束。
void Del(LinkList L)//删除职工信息。{
int select;
//删除方式选择记录变量。ListNode *p,*r;char find[20];if(!L->next)
//当list无后继结点时,提示和结束Del()函数。{
}
printf(“n按工号删除,请按‘1’n按姓名删除,请按‘2’n”);printf(“n=====>功能选择:”);scanf(“%d”,&select);if(select==1){
printf(“请输入要删除的职工工号:”);scanf(“%s”,find);getchar();p=Locatenum(L,find);if(p){ r=L;printf(“n***提示***:没有记录可以删除!n”);return;
} while(r->next!=p)r=r->next;//从第一个结点找起,直到发现r->next=p, 是待删除结点,跳出循环。
r->next=p->next;free(p);printf(“n***提示***:该职工信息已成功删除!n”);saveflag=1;else Nofind();}//if(select==1).else if(select==2){
printf(“请输入要删除的职工姓名:”);scanf(“%s”,find);getchar();p=Locatename(L,find);if(p){
} else Nofind();r=L;while(r->next!=p)r=r->next;r->next=p->next;free(p);printf(“n***提示***:该职工信息已成功删除!n”);saveflag=1;}//if(select==2).else Wrong();
//显示输入错误的话
}//void Del()删除函数结束。
void Search(LinkList L)
//查询职工信息。{ int select;
int salary;int sign=0;char find[20];ListNode *p;
//实现查询操作的临时结构体指针变量。if(!L->next){
} printf(“n按工号查找,请按‘1’n按工资查找,请按‘2’n按姓名查找,printf(”n=====>功能选择:“);scanf(”%d“,&select);printf(”n“);if(select==1)
//工号。{
} else if(select==2)
//工资。{
printf(”请输入要查找的工资:“);scanf(”%d“,&salary);p=Locatesalary(L,salary);printf(”请输入要查找的工号:“);scanf(”%s“,find);getchar();p=Locatenum(L,find);if(p){
} else Nofind();printf(”tttt
查找结果n“);printline();
//打印横线。printsubject();
//打印各分类标题。
printLinkList(p);
//打印p结点各个数据成员的值。printline();
//打印横线。printf(”n***提示***:没有职工信息资料可以查询!n“);printf(”返回主菜单,请重新选择功能!n“);return;请按‘3’n”);
} if(p){
} while(p){
{
} } if(sign==0)Nofind();printf(“tttt查找结果n”);printline();printsubject();printLinkList(p);printline();sign++;p=Locatesalary(p,salary);if(p)printf(“tttt查找结果n”);printline();printsubject();printLinkList(p);printline();sign++;else if(select==3)
//姓名。{
printf(“请输入要查找的姓名:”);scanf(“%s”,find);getchar();p=Locatename(L,find);if(p){
printf(“tttt查找结果n”);printline();printsubject();printLinkList(p);
} } printline();else Nofind();else Wrong();}//void Search()查询函数结束。
void Save(LinkList L)
//信息保存到文件中。{
FILE *fp;ListNode *p;int count=0;int flag=1;fp=fopen(“Employeeinfo.txt”,“wb”);if(fp==NULL){
} p=L->next;while(p){
if(fwrite(p,sizeof(ListNode),1,fp)==1)
//将第一个记录结点值写入文
{
p=p->next;
//依次写入下一个结点的 count++;
//文件的记录数+1。printf(“n***提示***:打开文件时发生错误!n”);return;件。
值。
}
else
{
flag=0;
printf(“写入文件过程发生错误!n”);
break;
}
}//while(p).if(count>0){
} else {
} fclose(fp);system(“cls”);//清屏。
printf(“文件保存失败!‘0’条记录被保存。n”);printf(“n***提示***:文件保存成功。(有%d条记录已经保存。)n”,count);saveflag=0;
}//void Save()函数结束。
void Sort(LinkList L)
//排序功能函数。{
ListNode *p,*m,*n;int i,j,count=0;p=L->next;if(!p){
} system(“cls”);
//清屏。printf(“按工资从低到高排序:n”);printf(“***以下为排序前的所有职工记录***n”);Allemployeeinfo(L);while(p){
} for(i=0;i //不包含头结点的职工信息结点的总个数。p=p->next;system(“cls”); //清屏。printf(“无任何职工信息!n”);printf(“返回主菜单!n”);return; } { } printf(“***以下为排序后的所有职工记录***n”);Allemployeeinfo(L);saveflag=1;printf(“排序成功!n”);n=L;p=L->next;m=p->next;while(m){ } if(p->data.salary>m->data.salary){ } else { } n=p;p=m;m=m->next;n->next=p->next;p->next=m->next;m->next=p;n=m;m=p->next;void Statistics(LinkList L)//统计职工中的最高工资和最低工资。{ ListNode *Max,*Min;int i;ListNode *t=L->next;if(!t){ system(“cls”); //清屏。printf(“没有储存任何职工记录!n”); } } printf(“返回主菜单,请先录入职工信息!n”);return;system(“cls”);Max=Min=t;t=t->next;while(t){ } printf(“最高工资为:%dn”,Max->data.salary);printf(“最低工资为:%dn”,Min->data.salary);printf(“若要查看最低,最高工资的相关职工信息,n”);printf(“请按‘1’,然后按照提示进行相关操作,n”);printf(“否则,请按‘1’除外的任何数字键以退出统计功能,返回主菜单。n”);printf(“n=====>功能选择:”);scanf(“%d”,&i);if(i==1)Search(L); //显示符合要求的职工信息。return;else if(Max->data.salary //Max指针指向最高工资的职工结点。Min=t; //Min指针指向最低工资的职工结点。if(Min->data.salary>t->data.salary)t=t->next;void Insert(LinkList L) //插入新的职工信息。{ printf(“本功能可以通过姓名和工号查找到符合要求的n”);//功能介绍。printf(“相关职工信息,然后将您希望添加进去的新的n”);printf(“职工信息插入到该职工信息记录的后面。n”);ListNode *p,*s;char find[20]; //存放工号和姓名的变量。int i;printf(“通过姓名查找,请按‘1’。n”);printf(“通过工号查找,请按‘2’。n”); printf(“返回主菜单,请按‘3’。n”);printf(“n=====>功能选择:”);scanf(“%d”,&i);printf(“n”);if(i==3){ } else if(i==1){ printf(“请输入已在存储记录中的职工姓名:”);scanf(“%s”,find);getchar();p=Locatename(L,find);//定位。if(!p){ } s=(LinkList)malloc(sizeof(ListNode));if(!s){ } printf(“请输入新职工工号:”);gets(s->data.num);printf(“n”);printf(“请输入新职工姓名:”);scanf(“%s”,s->data.name);getchar();printf(“n”);printf(“请输入新职工的性别:(注:男性:male;女性:female)”);scanf(“%s”,s->data.sex);printf(“系统分配存储空间失败!n”);system(“cls”);return;printf(“您输入的该职工姓名不在信息记录中,请重新核审!n”);printf(“返回主菜单。n”);return;system(“cls”); //退出插入功能,返回主菜单。return; } getchar();printf(“n”);printf(“请输入新职工的年龄:”);scanf(“%d”,&s->data.age);printf(“n”);printf(“请输入新职工的学历:”);scanf(“%s”,s->data.education);getchar();printf(“n”);printf(“请输入新职工的工资:”);scanf(“%d”,&s->data.salary);printf(“n”);printf(“请输入新职工的电话号码:”);scanf(“%s”,s->data.phone);getchar();printf(“n”);printf(“请输入新职工的住址:”);scanf(“%s”,s->data.address);getchar();printf(“n”);s->next=p->next;p->next=s;printf(“姓名为:%s的新职工信息已成功插到姓名为:%s的职工信息记saveflag=1; //资料已改动的存储变量。录后面。n”,s->data.name,p->data.name);else if(i==2){ printf(“请输入已在存储记录中的职工工号:”);scanf(“%s”,find);getchar();p=Locatenum(L,find);//定位。if(!p){ printf(“您输入的该职工工号不在信息记录中,请重新核审!n”);printf(“返回主菜单。n”);return; } s=(LinkList)malloc(sizeof(ListNode));if(!s){ } printf(“请输入新职工工号:”);gets(s->data.num);printf(“n”);printf(“请输入新职工姓名:”);scanf(“%s”,s->data.name);getchar();printf(“n”);printf(“请输入新职工的性别:(注:男性:male;女性:female)”);scanf(“%s”,s->data.sex);getchar();printf(“n”);printf(“请输入新职工的年龄:”);scanf(“%d”,&s->data.age);printf(“n”);printf(“请输入新职工的学历:”);scanf(“%s”,s->data.education);getchar();printf(“n”);printf(“请输入新职工的工资:”);scanf(“%d”,&s->data.salary);printf(“n”);printf(“请输入新职工的电话号码:”);scanf(“%s”,s->data.phone);getchar();printf(“n”);printf(“请输入新职工的住址:”);scanf(“%s”,s->data.address);getchar();printf(“n”);printf(“系统分配存储空间失败!n”);system(“cls”);return; } } s->next=p->next;p->next=s;printf(“姓名为:%s的新职工信息已成功插到姓名为:%s的职工信息记saveflag=1;录后面。n”,s->data.name,p->data.name);else { } printf(“功能选择有误!返回主菜单。n”);return;void main(){ LinkList L;/*定义链表*/ // struct Node *list; FILE *fp;/* 文件指针 */ int choose;/*保存选择结果变量*/ char ch; /*保存(y,Y,n,N)*/ int count=0;/*保存文件中的记录条数(或结点个数)*/ struct Node *p,*r; /*定义记录指针变量*/ printf(“tttt职工信息管理系统nttttn”); L=(struct Node*)malloc(sizeof(struct Node)); if(!L) { printf(“n系统分配存储空间失败!n”);/*如没有申请到,打印提示信 return; /*返回菜单*/ 息*/ } L->next=NULL; r=L; fp=fopen(“Employeeinfo.txt”,“rb”); if(fp==NULL) { printf(“n***提示***:存储职工信息的文件还不存在,是否创建? scanf(”%c“,&ch);(y/n)n”); */ if(ch=='y'||ch=='Y') { fp=fopen(“Employeeinfo.txt”,“ab+”); printf(“文件创建成功!n”); } else { printf(“文件没有创建,无法写入职工信息!nn”); printf(“<-----退 出 职 工 信 息 管 理 系 统----->n”); exit(0); } } // if(fp==NULL) printf(“n=====>提示:文件已经打开,正在导入记录......n”); while(!feof(fp))//没有到文件尾时,循环 { fclose(fp);/* 关闭文件 */ printf(“n=====>提示:记录导入完毕,共导入%d条记录。n”,count); while(1) p=(struct Node*)malloc(sizeof(struct Node)); if(!p) { if(fread(p,sizeof(struct Node),1,fp))/* 读文件的已有内容放入结点中 { p->next=NULL; r->next=p; r=p;/* 将该结点挂入链表中, r指向最后的节点 */ count++; printf(“ memory malloc failure!n”); /*没有申请成功*/ exit(0); /*退出*/ } } } //while(!feof(fp)) { menu(); printf(“tt====>请选择:”); scanf(“%d”,&choose); if(choose==0) { if(saveflag==1) { getchar(); printf(“n=====>提示:资料已经改动,是否将改动保存到文件 scanf(”%c“,&ch); if(ch=='y'||ch=='Y') Save(L);中(y/n)?n”); } //if printf(“n***提示***:您已经退出系统,欢迎再次使用!~n”); break; }//if switch(choose){ case 1:Add(L); break;break;break;break;break;break;Sort(L);break;Save(L);case 2:Del(L);case 3:Search(L);case 4:Modify(L);case 5:Insert(L);case 6:Statistics(L);case 7: case 8: break;system(“cls”);Allemployeeinfo(L);break;case 9: default: } } } Wrong();break;