C语言实现单向链表

admin C/C++ 889 次浏览 , 没有评论

终于理解了链表的,发现自己只是被套进了圈里,只要绕出这个圈,链表其实很好理解,昨晚连夜实现了链表的增删改查,下一步就可以开始进攻数据结构和算法了!!

加油!!

下面贴上代码和运行截图

C语言实现单向链表

C语言实现单向链表

代码

//

//  main.c

//  disan

//

//  Created by zhaochun on 16/2/21.

//  Copyright © 2016 zhaochun. All rights reserved.

//

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

typedef struct Node{

    int data;

    struct Node *pNext;

} pNode;

//创建一个单项链表

pNode *create_node(){

    pNode *pHead = (pNode *)malloc(sizeof(pNode));

    if(pHead == NULL){

        printf(链表因分配内存错误而创建失败\n”);

        return 0;

    }

    memset(pHead,0,sizeof(pNode));

    pHead->pNext = NULL;

    return pHead;

}

//获取链表最后一个内存地址

pNode *get_last_pnext(pNode *pHead){

    pNode *p = NULL,*last = pHead;

    p = pHead->pNext;

    while (p != NULL) {

        last = p;

        p = p->pNext;

    }

    return last;

}

//向链表添加一个值

void add_node(pNode *pHead,int data){

    pNode *pNew = (pNode *)malloc(sizeof(pNode));

    if(pNew == NULL){

        printf(添加值:%d失败\n”,data);

    }

    memset(pNew,0,sizeof(pNode));

    pNode *pLast = get_last_pnext(pHead);

    pNew->data = data;

    pNew->pNext = NULL;

    pLast->pNext = pNew;

    printf(添加值:%d成功\n”,data);

    return;

}

//修改链表中的值

void update_node(pNode *pHead,int update,int data){

    pNode *p = NULL;

    p = pHead->pNext;

    while (p != NULL) {

        if(p->data == update){

            p->data = data;

        }

        p = p->pNext;

    }

    printf(将值:%d,改为%d,成功\n”,update,data);

    return;

}

//删除链表中的值

void del_node(pNode *pHead,int data){

    pNode *p = NULL,*first = NULL;

    p = pHead->pNext;

    first = pHead;

    while (p != NULL) {

        if(p->data == data){

            first->pNext = p->pNext;

            free(p);

            p = first;

        }else{

            first = p;

            p = p->pNext;

        }

    }

    printf(删除值:%d,成功\n”,data);

    return;

}

//获取链表的列表

void get_list(pNode *pHead){

    pNode *p = NULL;

    p = pHead->pNext;

    while (p != NULL) {

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

        p = p->pNext;

    }

    printf(“\n”);

    return;

}

int main(){

    char str[10] = {0};

    pNode *pHead = create_node();

    printf(命令参数:列表:list;添加:add;修改:update;删除:del;退出:exit\n”);

    while (1) {

        printf(请输入命令:);

        scanf(“%s”,str);

        if(strcmp(str,“add”) == 0){

            int value = 0;

            printf(请输入一个整数:);

            scanf(“%d”,&value);

            add_node(pHead,value);

        }else if(strcmp(str,“list”) == 0){

            get_list(pHead);

        }else if(strcmp(str,“del”) == 0){

            int value = 0;

            printf(请输入要删除的值:);

            scanf(“%d”,&value);

            del_node(pHead, value);

        }else if(strcmp(str,“update”) == 0){

            int value = 0,data = 0;

            printf(请输入要修改的值:);

            scanf(“%d”,&value);

            printf(请输入修改后的值:);

            scanf(“%d”,&data);

            update_node(pHead, value, data);

        }else if(strcmp(str,“exit”) == 0){

            printf(“bye\n”);

            return 0;

        }else{

            printf(命令参数:列表:list;添加:add;修改:update;删除:del;退出:exit\n”);

        }

    }

    return 0;

}

打赏
Go