#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语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:507 |
C语言程序设计教程(第三版)课后习题6.5 (C语言代码)浏览:595 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:262 |
回文数字 (C语言代码)浏览:2510 |
出圈】指针malloc版浏览:355 |
C语言程序设计教程(第三版)课后习题10.2 (C语言代码)浏览:687 |
字符串比较 (C语言代码)浏览:685 |
1134题解(求分析)浏览:729 |
众数问题 (C语言代码)浏览:673 |
生日日数 (C语言代码)浏览:1502 |