C语言链表,增删改查

代码地址:

https://code.csdn.net/u012995856/shujujiegou/tree/master/basicDataStructure/myLinkedList.c

运行:

C语言链表,增删改查_第1张图片

代码:

#include
#include
#include
typedef int DataType;
typedef int  Status;
typedef struct List LinkedList;
#define OK 1
#define Error 0
/**
 *
 * author:pangPython
 * time:2017-06-12 22:54
 *
**/
//定义了链表结构体
typedef struct List{
    DataType data;
    struct List *next;
} LinkedList;
//自定义带换行的打印
void println(char string[]){
    puts(string);
    //printf("\n");
}
//创建链表 输入-1结束
LinkedList * newLinkList(){
    LinkedList * head = NULL;//保存头结点
    LinkedList * p1,*p2;//p1保存新节点 p2保存上一个节点
    int flag = 0;
    p1 = (LinkedList *)malloc(sizeof(LinkedList));
    if(p1 == NULL){
        println("内存分配失败!");
        exit(1);
    }
    scanf("%d",&p1->data);
    head = NULL;
    while(p1->data >= 0){
        //头结点
        flag += 1;
        if(flag == 1){
            head = p1;
        }else{
            p2->next = p1;
        }
        p2 = p1;
        p1 = (LinkedList *)malloc(sizeof(LinkedList));
        if(p1 == NULL){
            println("内存分配失败!");
            exit(1);
        }
        scanf("%d",&p1->data);
    }
    //数据
    //
    println("创建链表成功...");   
    p1 -> next = NULL;
    return head;
}
//插入节点
void newNode(LinkedList * linklist,LinkedList * node,int pos){
    println("插入节点...");
    int count = 0;//计数
    LinkedList * lastNode;
    while(linklist!=NULL){
        count++;
        lastNode = linklist;
        if(count == pos){
            //printf("%d\n",linklist->data);
            node->next = linklist->next;
            lastNode->next = node;
            return;
        }
        linklist = linklist->next;
    }

}
//删除节点
void rmNode(LinkedList * linklist,int pos){
    println("删除节点...");
    int count = 0;
    LinkedList * lastNode;
    while(linklist != NULL){
        count++;
        lastNode = linklist;
        if(count == pos){
            linklist = linklist->next;
            lastNode->next = linklist->next;
            return;
        }
        linklist = linklist->next;
    }
}
//修改节点
void editNode(LinkedList * linklist,int pos,DataType data){
    println("修改节点数据...");
}
//查询
void getNode(LinkedList * linklist,int pos){
    println("查询...");
}
//销毁链表
Status destroyLinkList(LinkedList * head){
    LinkedList * p = head;
    if(head != NULL){
        head->next = head;
        free(p);
        p = head;
    }
    println("已经销毁链表...");
}
//遍历列表
void traverseLinkList(LinkedList * linklist){
    println("遍历列表...");
    if(linklist == NULL){
        println("链表为空!");
        return;
    }
    while(linklist != NULL){
        printf("%d\n",linklist->data);
        linklist = linklist->next;
    }
    println("The End...");
}
//清空链表 数据节点置零
LinkedList enmptyLinkList(LinkedList * linklist){
    println("清空链表...");
    if(linklist == NULL){
        println("链表为空!");
        return;
    }
    while(linklist != NULL){
        linklist->data = 0;
        linklist = linklist->next;
    }
    println("链表已经清空...");

}

int main()
{

    LinkedList * list = newLinkList();
    traverseLinkList(list);

    LinkedList * Node = (LinkedList *)malloc(sizeof(LinkedList));
    Node->data = 222;
    newNode(list,Node,2);
    traverseLinkList(list);

    rmNode(list,2);
    traverseLinkList(list);

    enmptyLinkList(list);
    destroyLinkList(list);

    return 0;
}

你可能感兴趣的:(C/C++)