链表 实例代码
来源:互联网 发布:正见 佛陀的证悟 知乎 编辑:程序博客网 时间:2024/06/03 23:27
#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct node{ char id[20]; char name[20]; int age; struct node *next;} NODE, *LINK;LINK head = NULL;LINK n = NULL;int AddNode(LINK);void ShowNode(void);int DeleteNode(LINK);int PrintLine(int);int AddLine(LINK,int);int DeleteLine(int);void Free(void);int AddNode(LINK add){ LINK pre; LINK cur; pre = head; cur = head->next; if (head->next == NULL) { head->next = add; return(0); } else { while (cur != NULL) { if (strcmp(add->id, cur->id) <= 0) break; else { pre = cur; cur = cur->next; } } pre->next = add; add->next = cur; return(0); }}int AddLine(LINK add, int index){ LINK pre; LINK cur; pre = head; cur = head->next; while(index!=1 && cur!=NULL) { pre = cur; cur = cur->next; index-=1; } if (cur==NULL,index!=1) { printf("Did not find the correct intex to add\n"); return(1); } else{ pre->next = add; add->next = cur; return(0); }}int DeleteNode(LINK delete){ LINK pre; LINK cur; pre = head; cur =head->next; if (head->next == NULL) { printf("Did not find to delete\n"); return(1); } else { while(cur!=NULL) { if (strcmp(delete->id, cur->id) == 0) break; else { pre = cur; cur = cur->next; } } if (cur==NULL) { printf("Did not find to delete\n"); return(1); } else{ pre->next = cur->next; free(cur); cur = NULL; free(delete); delete = NULL; return(0); } }}int DeleteLine(int index){ LINK pre; LINK cur; pre = head; cur = head->next; while(index!=1 && cur!=NULL) { pre= cur; cur = cur->next; index-=1; } if (index!=1 && cur==NULL) { printf("Did not find correct index to delete\n"); return(1); } else { pre->next = cur->next; free(cur); cur = NULL; return(0); }}int PrintLine(int index){ LINK cur; cur = head->next; while(index!=1 && cur!= NULL) { cur = cur->next; index -=1; } if (cur==NULL) { printf("Did not find to print\n"); return(1); } else { printf("%-10s: %-10s: %3d\n", cur->id, cur->name, cur->age); return(0); }}void ShowNode(void){ LINK p; if (head != NULL) { p = head->next; while (p) { printf("%-10s: %-10s: %3d\n", p->id, p->name, p->age); p = p->next; } } else printf("Empty!");}void Free(void){ LINK cur; cur = head->next; while(cur!=NULL){ head = cur->next; free(cur); cur=head; } free(cur); cur=NULL; free(head); head=NULL;}int main(int argc, char const *argv[]){ FILE *file; char buffer[128]; char *temp; char op; int index; head = (LINK)malloc(sizeof(NODE)); head->next = NULL; if (argc != 2) { fprintf(stderr, "error\n"); exit(EXIT_FAILURE); } file = fopen(argv[1], "rt"); // file = fopen("Lab1test.DAT", "rt"); if (file == NULL) { fprintf(stderr, "Cannot open/find %s\n", "Lab1test.DAT"); getchar(); exit(EXIT_FAILURE); } while (!feof(file)) { if (fgets(buffer, 127, file) == NULL) break; buffer[strlen(buffer) - 1] = '\0'; n = (LINK)malloc(sizeof(NODE)); temp = strtok(buffer, ","); strcpy(n->id, temp); temp = strtok(NULL, ","); strcpy(n->name, temp); temp = strtok(NULL, ","); n->age = atoi(temp); n->next = NULL; if (AddNode(n) != 0) { fprintf(stderr, "Error adding node. Aborting\n"); getchar(); exit(EXIT_FAILURE); } } ShowNode(); while(1) { printf("you can input: P D I S or Q \n"); scanf("%s",&buffer); /**/ buffer[strlen(buffer)] = '\0'; op = buffer[0]; if (op == 'P') { index =atoi( &buffer[1]); if(PrintLine(index)!=0) printf("please input again...\n"); } else if (op== 'D') { index = atoi(&buffer[1]); if (DeleteLine(index)!=0) printf("please input again...\n"); } else if (op == 'I') { n = (LINK)malloc(sizeof(NODE)); strtok(buffer, ","); index = atoi(&buffer[1]); temp = strtok(NULL,","); strcpy(n->id, temp); temp = strtok(NULL, ","); strcpy(n->name, temp); temp = strtok(NULL, ","); n->age = atoi(temp); n->next = NULL; if(AddLine(n,index)!=0) printf("please input again...\n"); } else if (op=='Q') break; else if (op=='S') ShowNode(); else printf("please input the correct operation\n"); } ShowNode(); getchar(); printf("starting to free NODE... \n"); Free(); printf("show the LINK: "); ShowNode(); getchar();return 0;}
阅读全文
0 0
- 链表 实例代码
- 实例代码
- 代码实例
- 代码实例
- AudioTrack实例代码 C++代码
- AudioTrack实例代码 C++代码
- JSP分页代码实例
- Struts + Hibernate 代码实例
- struts分页实例代码
- javascript经典代码实例
- 代码生成器的实例
- 代码实例:级联菜单
- JAVA分页代码实例
- JSP分页代码实例
- Struts2 入门实例代码
- .net事件实例代码
- Socket实例代码
- Jsp分页实例代码
- 解决tomcat运行报错java.lang.UnsatisfiedLinkError: apache-tomcat-7.0.37\bin\tcnative-1.dll:Can load AMD 64
- 第9周项目2- 二叉树遍历的递归算法
- 一篇关于ajax的故事
- 模板模式
- 第九周项目1-二叉树算法库
- 链表 实例代码
- mongodb node.js 身份验证启动/连接
- maven项目红色叹号解决办法
- WebAPI记录发布3
- pythonl控制jenkins操作
- 我
- 第八周项目1
- 自定义组合控件
- C语言的Socket编程例子(TCP和UDP)