学好C走遍天下都不怕


私信TA

用户名:goodC

访问量:931

签 名:

等  级
排  名 2677
经  验 2121
参赛次数 0
文章发表 31
年  龄 0
在职情况 学生
学  校 合肥学院
专  业

  自我简介:

#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 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区