1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
#include<stdio.h> #include<malloc.h> typedef struct link { char name[20]; int num; struct Link *next; }Link, *pLink;//Link=struct link,pLink=struct link * //***************************创建函数*********************************** pLink create(){ pLink head, p1, p2;//p1指向当前新结点、p2指向上一个节点 int n = 0; p1 = p2 = (pLink)malloc(sizeof(Link)); printf("请输入第1个员工编号:"); scanf("%d", &p1->num); printf("请输入第1个员工姓名:"); scanf("%s", &p1->name); head = NULL; while (p1->num != 0)//设置当输入num为0时 输入结束 { n++; if (n == 1)head = p1; else p2 = p1; p1 = (pLink)malloc(sizeof(Link)); printf("请输入第%d个员工编号:", n + 1); scanf("%d", &p1->num); printf("请输入第%d个员工姓名:", n + 1); scanf("%s", &p1->name); p2->next = p1; } p2->next = NULL; return(head); } //*******************************end*********************************** //*****************************打印函数********************************* void output(pLink q) { while (q != NULL) { printf("%d:%s\n",q->num,q->name); q = q->next; } } //******************************************************************** //****************************查询函数********************************* char * search(pLink q,int num){ //传入的是链表的头指针、员工编号,返回的是员工姓名的首地址 while (q != NULL) { if (q->num == num) return q->name; q = q->next; } return 0; } //********************************************************************* int main() { pLink p; int number; p = create(); printf("*******************打印链表********************\n"); output(p); printf("输入要查询的员工编号:"); scanf("%d", &number); printf("查询的员工姓名为:"); printf("%s\n", search(p, number)); system("pause"); return 0; } |