加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C语言 实现链表

发布时间:2020-12-16 07:42:36 所属栏目:百科 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 #include "stdafx.h"#include "stdlib.h"#include "string.h"typedef struct{ char key[15]; char name[20]; int age;}DATA; typedef struct Node{ DA

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

#include "stdafx.h"
#include "stdlib.h"
#include "string.h"
typedef struct{
    char key[15];
    char name[20];
    int age;
}DATA;
 
typedef struct Node{
    DATA data;
    struct Node * next;
 
}ChainListType;
//  添加到节点的尾部
    ChainListType * ChainListAddEnd(ChainListType * head,DATA data){
        //head 为链表的头指针,data为节点保存的数据
        ChainListType *node,*h;
        //因为需要动态分配内存 所以需要引入 stdlib.h 头文件
        if (!(node = (ChainListType *)malloc(sizeof(ChainListType)))){
            printf("为保存的节点数据申请内存失败");
            return NULL;
        }
        node->data = data;
        node->next = NULL;
        if (head == NULL){
            head = node;
            return head;
        }
        h = head;
        while (h->next!=NULL)
            h = h->next;
            h->next = node;
            return head;
}
        //添加节点到首部
    ChainListType * ChainListAddFirst(ChainListType *head,DATA data){
        ChainListType * node,*h;
        if (!(node = (ChainListType *)malloc(sizeof(ChainListType)))){
            printf("为保存的节点数据申请内存失败");
            return NULL;
        }
        node->data = data;
        node->next = head;     //指向头指针所指节点
        head = node;          //头指针指向新增节点
        return head;
 
    }
    //按照关键字查找节点
    ChainListType * ChainListFind(ChainListType * head,char *key){
        ChainListType *h;
        h = head;
        while (h)
        {
            if (strcmp(h->data.key,key) == 0){      //若节点的关键字与传入关键字相同
                return h;                          //  返回该节点指针
                h = h->next;                       //  处理下一个节点
            }
        }
    }
    //插入节点到链表
    ChainListType * ChainListInsert(ChainListType *head,char *findkey,*node1;
        if (!(node = (ChainListType *)malloc(sizeof(ChainListType)))){
            printf("为保存的节点数据申请内存失败");
            return 0;
        }
        node->data = data;
        node1 = ChainListFind(head,findkey);
        if (node1){
            node->next = node1->next;
            node1->next = node;
        }
        else{
            free(node);
            printf("未找到插入位置n");
         
        }
        return head;
    }
    //删除节点
    int ChainListDelete(ChainListType *head,char *key){
        ChainListType *node,*h;
        node = h = head;
        while (h){
            if (strcmp(h->data.key,key) == 0){
                node->next = h->next;
                free(h);
                return 1;
            }
            else{
                node = h;
                h = h->next;
            }
        }
        return 0;
    }
    void ChainListAll(ChainListType *head){
        ChainListType *h;
        DATA data;
        h = head;
        printf("链表所有的数据如下n");
        while (h)
        {
            data = h->data;
            printf("%s%s%dn",data.key,data.name,data.age);
            h = h->next;
        }
    }
    //统计链表的长度
    int ChainListLength(ChainListType * head){
        ChainListType *h;
        int i = 0;
        h = head;
        while (h){
            i++;
            h = h->next;
        }
        return i;
    }

实现
int main(){
    ChainListType *node,*head = NULL;
    DATA data;
    char key[15],findkey[15];
    printf("输入链表中的数据.包括关键字,姓名,年龄,关键字输入0n");
    do{
        fflush(stdin);
        scanf("%s",data.key);
        if (strcmp(data.key,"0") == 0) break; //若输入0,则退出
        scanf("%s%d",&data.age);
        head = ChainListAddEnd(head,data);
    } while (1);
    ChainListAll(head);
     
    printf("在链表中查找,请输入关键字n");
    fflush(stdin);      //  清空输入缓冲区
    scanf("%s",key);
    node = ChainListFind(head,key);
    if (node){
        data = node->data;
        printf("关键字%s对应的节点数据(%s,%s,%d)n",key,data.age);
    }
    else{
        printf("在链表中未找到关键字为%s的节点n",key);
    }
 
    printf("在链表中删除节点,输入要删除的关键字n");
    fflush(stdin);
    scanf("%s",key);
    ChainListDelete(head,key);
    ChainListAll(head);
    //getch();
    system("pause");
}

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读