原题链接:数据结构-链表的基本操作
#include<stdio.h> #include<string.h> #include<malloc.h> typedef struct Node{ int c; struct Node* next; }NODE, * node; typedef struct{ node head; int len; }LIST, * list; void createNode(list l){ if(l != NULL){ l->head= (node)malloc(sizeof(NODE)); if(l->head){ l->head->c = 0; l->head->next = NULL; node temp = NULL; int state = 0; for(int i = 0; i < l->len; i++){ temp = (node)malloc(sizeof(NODE)); if(temp){ state = scanf("%d", &(temp->c)); if(l->head->next){ temp->next = l->head->next; l->head->next = temp; } else{ temp->next = NULL;//少了这个.麻烦. l->head->next = temp; } } } temp = NULL; } } } void show_data(LIST l){ node t = l.head->next; node delete = NULL; if(t == NULL){ puts("Link list is empty"); } else{ while(t){ printf("%d ", t->c); t = t->next; //delete = NULL; } puts(""); } } LIST delete_data(LIST l){ node t = l.head;//指向头节点. int n = 0; int status = scanf("%d", &n); if(l.len < n|| n<1){ puts("delete fail"); } else{ for(int i = 1; i < n; i++){//n为1 删除第一个元素.记录删除的上一个指针. t = t->next; } node temp = t->next;//头指针 t->next =temp->next; free(temp); temp = NULL; l.len--; puts("delete OK"); } return l; } LIST insert_data(LIST l){ node t = l.head;//指向头节点. int n = 0; int place = 0; int status = scanf("%d%d",&place, &n); if(l.len+1 < place || place < 1){//5五个元素 插入第7 个就不对. 第6个可以. puts("insert fail"); } else{ for(int i = 1; i <place; i++) t = t->next;//t是上一个结点. node temp = (node)malloc(sizeof(NODE));//头指针 temp->c = n; temp->next = t->next; t->next = temp; l.len++; puts("insert OK"); } return l; } LIST get_data(LIST l){ node t = l.head;//指向头节点. int n = 0; int place = 0; int status = scanf("%d", &place); if(l.len < place || place < 1){//5五个元素 插入第7 个就不对. 第6个可以. puts("get fail"); } else{ for(int i = 1; i <= place; i++){ t = t->next;//t当前结点. } printf("%d\n", t->c); } return l; } void free_point(node p){ if(p){ //释放指针. node temp = NULL; while(p){ temp = p; p = p->next; free(temp); } temp = NULL; } } int main(){ int n; int status = scanf("%d", &n); LIST l; l.head = NULL; l.len = n; createNode(&l); char arr[10] = { 0 }; char* p[4] = { "show","delete","insert","get"}; //char arr1[4][10] = { "show","delete","insert","get"}; status= scanf("%d", &n);//此时n是循环次数 while(n-->0){ status = scanf("%s", arr); int i = 0; for(; i < 4; i++){ //printf("%s\n", *(p + i)); //printf("%s\n", arr1[i]); if(strcmp(arr, *(p + i)) == 0) break; } switch(i){ case 0: show_data(l); break; case 1: l=delete_data(l); break; case 2: l = insert_data(l); break; case 3: l = get_data(l); break; default: break; } } //show_data(l); free_point(l.head); return 0; }
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复