下面是编程之家 jb51.cc 通过网络收集整理的代码片段。
编程之家小编现在分享给大家,也给大家做个参考。
#include "stdafx.h" #include "stdlib.h" #include "string.h" typedef struct{ char key[15]; char name[20]; int age; }DATA; typedef struct Node{ DATA data; struct Node * next; }ChainListType; // 添加到节点的尾部 ChainListType * ChainListAddEnd(ChainListType * head,DATA data){ //head 为链表的头指针,data为节点保存的数据 ChainListType *node,*h; //因为需要动态分配内存 所以需要引入 stdlib.h 头文件 if (!(node = (ChainListType *)malloc(sizeof(ChainListType)))){ printf("为保存的节点数据申请内存失败"); return NULL; } node->data = data; node->next = NULL; if (head == NULL){ head = node; return head; } h = head; while (h->next!=NULL) h = h->next; h->next = node; return head; } //添加节点到首部 ChainListType * ChainListAddFirst(ChainListType *head,DATA data){ ChainListType * node,*h; if (!(node = (ChainListType *)malloc(sizeof(ChainListType)))){ printf("为保存的节点数据申请内存失败"); return NULL; } node->data = data; node->next = head; //指向头指针所指节点 head = node; //头指针指向新增节点 return head; } //按照关键字查找节点 ChainListType * ChainListFind(ChainListType * head,char *key){ ChainListType *h; h = head; while (h) { if (strcmp(h->data.key,key) == 0){ //若节点的关键字与传入关键字相同 return h; // 返回该节点指针 h = h->next; // 处理下一个节点 } } } //插入节点到链表 ChainListType * ChainListInsert(ChainListType *head,char *findkey,*node1; if (!(node = (ChainListType *)malloc(sizeof(ChainListType)))){ printf("为保存的节点数据申请内存失败"); return 0; } node->data = data; node1 = ChainListFind(head,findkey); if (node1){ node->next = node1->next; node1->next = node; } else{ free(node); printf("未找到插入位置\n"); } return head; } //删除节点 int ChainListDelete(ChainListType *head,char *key){ ChainListType *node,*h; node = h = head; while (h){ if (strcmp(h->data.key,key) == 0){ node->next = h->next; free(h); return 1; } else{ node = h; h = h->next; } } return 0; } void ChainListAll(ChainListType *head){ ChainListType *h; DATA data; h = head; printf("链表所有的数据如下\n"); while (h) { data = h->data; printf("%s%s%d\n",data.key,data.name,data.age); h = h->next; } } //统计链表的长度 int ChainListLength(ChainListType * head){ ChainListType *h; int i = 0; h = head; while (h){ i++; h = h->next; } return i; }
实现
int main(){ ChainListType *node,*head = NULL; DATA data; char key[15],findkey[15]; printf("输入链表中的数据.包括关键字,姓名,年龄,关键字输入0\n"); do{ fflush(stdin); scanf("%s",data.key); if (strcmp(data.key,"0") == 0) break; //若输入0,则退出 scanf("%s%d",&data.age); head = ChainListAddEnd(head,data); } while (1); ChainListAll(head); printf("在链表中查找,请输入关键字\n"); fflush(stdin); // 清空输入缓冲区 scanf("%s",key); node = ChainListFind(head,key); if (node){ data = node->data; printf("关键字%s对应的节点数据(%s,%s,%d)\n",key,data.age); } else{ printf("在链表中未找到关键字为%s的节点\n",key); } printf("在链表中删除节点,输入要删除的关键字\n"); fflush(stdin); scanf("%s",key); ChainListDelete(head,key); ChainListAll(head); //getch(); system("pause"); }
以上是编程之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。