• 数据结构(链表的操作)C语言实现


    # include<stdio.h>
    # include<malloc.h>
    # include<stdlib.h>
    
    typedef struct Node
    {
        int data;
        struct Node *pNext;
    }NODE,*PNODE;
    
    PNODE create_list(void);
    void traverse_list(PNODE pHead);
    bool is_empty(PNODE pHead);
    int length_list(PNODE pHead);
    bool insert_list(PNODE pHead,int pos,int val);
    bool delete_list(PNODE pHead,int pos,int *pVal);
    void sort_list(PNODE pHead);
    
    int main(void)
    {
        PNODE pHead=NULL;
        pHead=create_list();
        traverse_list(pHead);
        int len=length_list(pHead);
        printf("链表的长度为%d
    ",len);
        insert_list(pHead,4,44);
        traverse_list(pHead);
        sort_list(pHead);
        traverse_list(pHead);
        int val;
        if(delete_list(pHead,4,&val))
        {
            printf("删除成功,您删除的元素是:%d
    ",val);
        }
        else
        {
            printf("删除失败,您删除的元素不存在
    ");
        }
        traverse_list(pHead);
        return 0;
    }
    PNODE create_list(void)
    {
        int len;
        int i;
        int val;
        PNODE pHead=(PNODE) malloc(sizeof(NODE));
        if(pHead==NULL)
        {
            printf("分配内存失败,程序终止");
            exit(-1);
        }
        printf("请输入需要生成的链表节点个数:len=");
        scanf("%d",&len);
        PNODE pTail=pHead;
        pTail->pNext=NULL;
        for(i=0;i<len;i++)
        {
            printf("请输入第%d个数据:",i+1);
            scanf("%d",&val);
            PNODE pNew=(PNODE) malloc(sizeof(NODE));
            if(pNew==NULL)
            {
                printf("分配内存失败,程序终止");
                exit(-1);
            }
            pNew->data=val;
            pTail->pNext=pNew;
            pNew->pNext=NULL;
            pTail=pNew;
        }
    
        return pHead;
    }
    void traverse_list(PNODE pHead)
    {
        PNODE p=pHead->pNext;
        while(p !=NULL)
        {
            printf("%d ",p->data);
            p=p->pNext;
        }
        printf("
    ");
        return;
    }
    bool is_empty(PNODE pHead)
    {
        if(pHead->pNext==NULL)
            return true;
        else
            return false;
    }
    int length_list(PNODE pHead)
    {
        PNODE p=pHead->pNext;
        int len=0;
        while(p !=NULL)
        {
            len++;
            p=p->pNext;
        }
        return len;
    }
    void sort_list(PNODE pHead)
    {
        int i,j,t;
        int len=length_list(pHead);
        PNODE p,q;
        for(i=0,p=pHead->pNext;i<len-1;i++,p=p->pNext)
        {
            for(j=i+1,q=p->pNext;j<len;j++,q=q->pNext)
            {
                if(p->data > q->data)
                {
                    t=p->data;
                    p->data=q->data;
                    q->data=t;
                }
            }
        }
        return;
    }
    bool insert_list(PNODE pHead,int pos,int val)
    {
        int i=0;
        PNODE p=pHead;
        while(p !=NULL && i<pos-1)
        {
            p=p->pNext;
            i++;
        }
        if(i>pos-1 || p==NULL)
            return false;
        PNODE pNew=(PNODE)malloc(sizeof(NODE));
        if(pNew==NULL)
        {
            printf("动态内存分配失败
    ");
            exit(-1);
        }
        pNew->data=val;
        PNODE q=p->pNext;
        p->pNext=pNew;
        pNew->pNext=q;
        return true;
    }
    bool delete_list(PNODE pHead,int pos,int *pVal)
    {    
        int i=0;
        PNODE p=pHead;
        while(p->pNext !=NULL && i<pos-1)
        {
            p=p->pNext;
            i++;
        }
        if(i>pos-1 || p->pNext==NULL)
            return false;
        PNODE q=p->pNext;
        *pVal=q->data;
        p->pNext=p->pNext->pNext;
        free(q);
        q=NULL;
        return true;
    }
  • 相关阅读:
    vue+elementUI表格排序事件
    移动端flex布局
    注册发送验证码提示信息
    jquery模拟生日日期下拉选择框
    标签模拟多选择框checkbox
    vue关于组件传值
    关于前端浏览器与服务器间的交互的对比与分析
    axios的基本使用
    Promise的基本使用
    Vue Cli2 文件路径别名
  • 原文地址:https://www.cnblogs.com/zhujialei123/p/9185071.html
Copyright © 2020-2023  润新知