user-0 提问: 数据结构求指教

回复:
user: user-1
content: 修改如下：  #include<stdio.h> #include<stdlib.h> #include<string.h> #define MAX 100 typedef int Staff; typedef struct ElemType {    //学生信息结构体定义 	char num[MAX]; 	char name[20]; 	char sex[8]; 	char birth[20]; 	char telenum[20]; 	struct ElemType *next; }ElemType; typedef struct { 	ElemType *data; 	int length; }SqList; void ListInit(SqList &L) {//录入员工信息  	int x, i; 	L.length = 0; 	L.data = (ElemType *)malloc(sizeof(ElemType));   //头节点 	ElemType *p = L.data; 	printf("请输入要输入员工的人数：\n"); 	scanf("%d", &x); 	if(x >= 0) L.length = x;     //直接赋值 	//for (i = 0; i < x - 1; i++) { 	for (i = 0; i < x; i++) { 		p->next = (ElemType *)malloc(sizeof(ElemType)); 		p = p->next; 		printf("请输入第%d个员工的信息：\n", i + 1);    //输入数据元素 		printf("员工号："); 		scanf("%s", p->num); 		printf("姓名："); 		scanf("%s", p->name); 		printf("性别："); 		scanf("%s", p->sex); 		printf("出生日期："); 		scanf("%s", p->birth); 		printf("电话号码："); 		scanf("%s", p->telenum); 		//L.length++; 	} 	p->next = NULL; } void PrintList(SqList L) {//输出员工信息  	if (L.length){ 		int i; 		ElemType *p = L.data->next;   //跳过头节点，指向第一个节点 		printf("*****************************\n"); 		printf("输出员工表：\n"); 		printf("*****************************\n"); 		for (i = 0; i < L.length; i++) { 			printf("%s的信息为：\n", p->num); 			printf("姓名：%s\n", p->name); 			printf("性别：%s\n", p->sex); 			printf("出生日期：%s\n", p->birth); 			printf("电话号码：%s\n", p->telenum); 			p = p->next; 		} 	} } void LocateElem(SqList L) {//查询员工信息 	if (L.length) { 		int i; 		ElemType *p = L.data->next;   //跳过头节点，指向第一个节点 		char num1[MAX]; 		printf("请输入员工的员工号：\n"); 		scanf("%s", num1); 		printf("*****************************\n"); 		printf("输出员工表：\n"); 		printf("*****************************\n"); 		for (i = 0; i < L.length; i++) { 			if (!strcmp(num1, p->num)) { 				printf("%s的信息为：\n", p->num); 				printf("姓名：%s\n", p->name); 				printf("性别：%s\n", p->sex); 				printf("出生日期:%s\n", p->birth); 				printf("电话号码:%s\n", p->telenum); 				break; 			} 			p = p->next; 		} 		if (i == L.length)printf("输入有误，员工号不存在：\n"); 	} } void ListUpdate(SqList &L) { 	if (L.length) { 		ElemType *p = L.data->next; 		char num1[MAX]; 		printf("请输入员工的员工号：\n"); 		scanf("%s", num1); 		int i; 		//while (p->next) p = p->next; 		//q = (ElemType *)malloc(sizeof(ElemType)); 		//q->next = NULL; 		for (i = 0; i < L.length; i++) { 			if (!strcmp(num1, p->num)) { 				break; 			} 			p = p->next; 		} 		if (i == L.length) printf("输入有误，员工号不存在：\n"); 		else { 			printf("请输入%s员工的更改后的信息：\n");    //输入数据元素  			printf("姓名："); 			scanf("%s", p->name); 			printf("性别："); 			scanf("%s", p->sex); 			printf("出生日期："); 			scanf("%s", p->birth); 			printf("电话号码:"); 			scanf("%s", p->telenum); 			printf("修改成功\n"); 		} 	} } void ListInsert(SqList &L) {//添加员工信息 	ElemType *p = L.data; 	while (p->next) p = p->next; 	p->next = (ElemType *)malloc(sizeof(ElemType)); 	p = p->next; 	printf("请输入新员工的信息：\n");    //输入数据元素 	printf("员工号："); 	scanf("%s", p->num); 	printf("姓名："); 	scanf("%s", p->name); 	printf("性别："); 	scanf("%s", p->sex); 	printf("出生日期："); 	scanf("%s", p->birth); 	printf("电话号码:"); 	scanf("%s", p->telenum); 	p->next = NULL; 	L.length++; } void ListDelete(SqList &L) {//删除员工信息  	if (L.length) { 		int i; 		char num1[MAX]; 		ElemType *p = L.data, *q; 		printf("请输入员工的员工号：\n"); 		scanf("%s", num1); 		//if (!strcmp(num1, p->num))p = p->next; 		//else 		//for (i = 0; i < L.length - 1; i++) { 		for (i = 0; i < L.length; i++) { 			q = p->next; 			if (!strcmp(num1, q->num)) { 				p->next = q->next; 				L.length--; 				free(q);   //zx 				printf("删除成功\n"); 				break; 			} 			p = p->next; 		} 		if (i == L.length)printf("输入有误，员工号不存在：\n"); 	} } int main() {//主函数  	SqList L; 	int n; 	while (1) { 		printf("|******欢迎进入员工档案管理系统******|\n"); 		printf("|            1.录入员工信息          |\n"); 		printf("|            2.显示员工信息          |\n"); 		printf("|            3.查询员工信息          |\n"); 		printf("|            4.修改员工信息          |\n"); 		printf("|            5.添加员工信息          |\n"); 		printf("|            6.删除员工信息          |\n"); 		printf("|            7.统计员工信息          |\n"); 		printf("|            0.退出                  |\n"); 		printf("请输入您所选的选项（0--7）：\n"); 		scanf("%d", &n); 		if (0 == n) return 0; 		switch (n) { 		case 1: ListInit(L); break; 		case 2: PrintList(L); break; 		case 3: LocateElem(L); break; 		case 4: ListUpdate(L); break; 		case 5: ListInsert(L); PrintList(L); break; 		case 6: ListDelete(L); PrintList(L); break; 		default:printf("Enter data error!\n"); 		} 	} 	return 0; }

user: user-2
content: 逻辑太有问题了，