#include<stdio.h>

#include<stdlib.h>

#include<string.h>


//定义链表类型

typedef struct Node{

    int data;

    struct Node *next;

}Node, *LinkedList;


//初始化链表

LinkedList Listint(){

    Node *L;

    L = (Node*)malloc(sizeof(Node));//分配空间

    if(L == NULL){

        exit(1);

    }

    L->next = NULL;

    return L;

}


//头插法

LinkedList LinkedListH(LinkedList L,int x){

    

    Node *p;

    for(int i = 0; i < x; i++){

        p = (Node*)malloc(sizeof(Node));

        scanf("%d",&p->data);

        p->next = L->next;

        L->next = p;

    }

    return L;

}

//尾插法

/*LinkedList LinkedListT(LinkedList L, int x){

    Node *p,*r;

    r = L;

    

    for(int i = 0; i < x; i++){

        p = (Node*)malloc(sizeof(Node));

        scanf("%d", &p->data);

        r->next = p;

        r = p;

    }

    return L;

}*/


//遍历输出

void printlist(LinkedList L){

    Node *p = L->next;

    if(p == NULL){

        printf("Link list is empty");

    }

    else {

        while(p){

        printf("%d ",p->data);

        p = p->next;

    }

    }

}


//获得一个整数

int getA(LinkedList L, int x){

    int y = 0;

    if(L->next == NULL){

        printf("get fail\n");

    }

    for(int i = 0; i <= x; i++){

        y = L->data;

        L = L->next;

    }

    return y;

}


//删除一个整数

LinkedList Listde(LinkedList L, int x){

    Node *p,*pre;

    p = (Node*)malloc(sizeof(Node));

    p = L;

    

    for(int i = 0; i < x && p != NULL; i++){

        pre = p;

        p = p->next;

    }

    if (p == NULL) {

        printf("delete fail\n", x);

        return L;

    }

    pre->next = p->next;

    free(p);

    printf("delete OK\n");

    return L;

}


//插入一个整数

LinkedList Listin(LinkedList L,int x, int y){

    Node *pre;

    pre = L;

    

    for(int i = 1; i < x && pre != NULL; i++){

        pre = pre->next;

    }

    if (pre == NULL) {

        printf("insert fail\n");

        return L;

    }

    

    Node *p;

    p = (Node*)malloc(sizeof(Node));

    if(p == NULL){

        printf("内存分配失败\n");

        exit(1);

    }

    p->data = y;

    p->next = pre->next;

    pre->next = p;

    printf("insert OK\n");

    return L;

}


int main(){

    

    int n;

    scanf("%d",&n);

    //printf("%d",n);

    

    LinkedList list = Listint();

    LinkedListH(list,n);

    //printlist(list);

    //printf("\n");

    

    int m;

    scanf("%d",&m);

    //printf("%d",m);

    

    int a,b;

    char str[10];

    for(int i = 0; i < m; i++){

        scanf("%s",str);

        

        if(strcmp(str,"show") == 0){

            printlist(list);

            printf("\n");

        }

        

        if(strcmp(str,"get") == 0){

            scanf("%d",&a);

            printf("%d\n",getA(list,a));

        } 

        if(strcmp(str,"delete") == 0){

            scanf("%d",&a);

            Listde(list,a);

            //printlist(list);

        }

        

        if(strcmp(str,"insert") == 0){

            scanf("%d %d",&a,&b);

            Listin(list,a,b);

        }

    }

    

    return 0;

}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论