zoukankan      html  css  js  c++  java
  • C语言 百炼成钢23

    /*
    题目59:链表如下
    typedef struct _LinkList
    {
    int data;
    struct _LinkList*next;
    } LinkList;
    有如下结点数据域  1 2 3 4 5 6 7 8 12 19 。。。。
    要求1:创建链表
    要求2:删除结点值为偶数的结点 ;70分
    要求3:编写测试用例  30分
    */
    
    
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    
    typedef struct _linklist{
        int data;
        struct _linklist *pnext;
    }LinkList;
    
    //初始化链表头结点
    int InitLink(LinkList **pout/*out*/){
        int ERRO_MSG = 0;
        if (pout==NULL)
        {
            ERRO_MSG = 1;
            printf("pout==NULL erro msg:%d
    ", ERRO_MSG);
            return ERRO_MSG;
        }
        LinkList * phead = (LinkList *)malloc(sizeof(LinkList));
        if (phead==NULL)
        {
            ERRO_MSG = 2;
            printf("分配内存失败 erro msg:%d
    ", ERRO_MSG);
            return ERRO_MSG;
        }
        phead->data = 0;
        phead->pnext = NULL;
        *pout = phead;
        return ERRO_MSG;
    }
    
    //创建链表节点
    int CreateLink(LinkList *pin/*in*/,int data){
        int ERRO_MSG = 0;
        if (pin==NULL)
        {
            ERRO_MSG = 1;
            printf("pin==NULL erro msg:%d
    ", ERRO_MSG);
            return ERRO_MSG;
        }
        LinkList *pHead = pin;
        LinkList *pCurrent = pHead->pnext;
        //创建新节点
        LinkList *pMalloc = (LinkList *)malloc(sizeof(LinkList));
        pMalloc->data = data;
        pMalloc->pnext = NULL;
        if (pCurrent==NULL)
        {
            pHead->pnext = pMalloc;
            return ERRO_MSG;
        }
        //遍历到链表节点末尾位置
        while (pCurrent->pnext){
            pCurrent = pCurrent->pnext;
        }
        pCurrent->pnext = pMalloc;
        return ERRO_MSG;
    }
    
    //删除结点值为偶数的结点
    int DelLink(LinkList *pin/*in*/){
        int ERRO_MSG = 0;
        if (pin == NULL)
        {
            ERRO_MSG = 1;
            printf("pin==NULL erro msg:%d
    ", ERRO_MSG);
            return ERRO_MSG;
        }
        LinkList *pHead = pin;
        LinkList *pCurrent = pHead->pnext;
        LinkList * pPrior = pHead;
        while (pCurrent){
            if (pCurrent->data%2==0)
            {
                pPrior->pnext = pCurrent->pnext;
                //释放这个节点
                free(pCurrent);
                pCurrent = NULL;
                pCurrent = pPrior->pnext;
            }
            else{
                pPrior = pCurrent;
                pCurrent = pCurrent->pnext;
            }
        }
        return ERRO_MSG;
    }
    
    //打印链表
    void PrintfA(LinkList *pin/*in*/){
        if (pin==NULL)
        {
            printf("链表不可以为空!
    ");
        }
        LinkList *pHead = pin;
        LinkList *pCurrent = pHead->pnext;
        while (pCurrent){
            printf("%d
    ", pCurrent->data);
            pCurrent = pCurrent->pnext;
        }
    }
    
    //释放链表
    int FreeLink(LinkList **pin/*in*/){
        int ERRO_MSG = 0;
        if (pin==NULL)
        {
            ERRO_MSG = 1;
            printf("pin==NULL erro msg:%d
    ", ERRO_MSG);
            return ERRO_MSG;
        }
        LinkList *pHead = *pin;
        LinkList *pCurrent = pHead->pnext;
        LinkList *pPrior = pHead;
        while (pCurrent){
            pPrior->pnext = pCurrent->pnext;
            //释放内存
            if (pCurrent)
            {
                free(pCurrent);
                pCurrent = NULL;
            }
            pCurrent = pPrior->pnext;
        }
        if (pHead)
        {
            free(pHead);
            pHead = NULL;
        }
        return ERRO_MSG;
    }
    
    void main(){
        int i = 0,ret=0;
        //初始化链表头结点
        LinkList *pHead = NULL;
        //初始化头结点
        InitLink(&pHead);
        //创建节点
        for (i = 0; i < 9; i++)
        {
            ret=CreateLink(pHead, i + 1);
            if (ret!=0)
            {
                printf("创建链表节点报错!
    ");
                //释放所有链表节点
                goto END;
            }
        }
        //打印所有节点
        PrintfA(pHead);
        //删除部分节点
        ret=DelLink(pHead);
        if (ret!=0)
        {
            printf("删除偶数节点报错!
    ");
            //释放所有链表节点
            goto END;
        }
        //打印所有节点
        PrintfA(pHead);
    END:
        //释放所有节点
        FreeLink(&pHead);
        system("pause");
    }

  • 相关阅读:
    inclusion_tag 组件
    自定制插件widget 组件
    Python的学习之旅———logging模块
    Python的学习之旅———面向过程
    Python的学习之旅———迭代器 生成器
    Python的学习之旅———模块与包的使用 常用模块
    Python的学习之旅———函数的递归调用 匿名函数 内置函数
    Python的学习之旅———三元表达式 列表解析 序列化
    Python的学习之旅———函数对象、函数嵌套、名称空间与作用域、装饰器
    Python的学习之旅———名称空间与作用域
  • 原文地址:https://www.cnblogs.com/zhanggaofeng/p/5597743.html
Copyright © 2011-2022 走看看