zoukankan      html  css  js  c++  java
  • 单链表的插入伪算法和用C语言创建单链表,并遍历

    非循环单链表插入结点伪算法讲解



    q插入p之后的伪算法:
    第一种表示方法:
    r = p->pNext; // p->pNext表示的是所指向结点的指针域,指针域又是指向下一个结点的地址
    p->pNext = q; // q保存了那一块结点的地址。q是一个指针变量,存放那个结点的地址。
    q->pNext = r;

    第二种表示方法:
    q->pNext = p->pNext; // q的指针域指向p后面一个结点
    p->pNext = q; // p的指针域指向q

    删除非循环单链表结点伪算法:
    把p后面的一个结点删除掉
    r = p->pNext;
    p->pNext = p->pNext->pNext;
    free(r); // 释放内存

    链表创建和链表遍历算法的演示:

    创建一个单链表,然后遍历。
    #include <stdio.h>
    #include <malloc.h>
    #include <stdlib.h>
    
    /*
    创建一个单链表,然后遍历。
    */
    
    typedef struct Node
    {
        int data; // 数据域
        struct Node *pNext; // 指针域
    }NODE, *PNODE; // NODE等价于struct Node, PNODE等价于struct Node *
    
    // 函数声明
    PNODE create_list(void);
    void traverse_list(PNODE pHead);
    
    int main(void)
    {
        PNODE pHead = NULL; // 等价于 struct Node *pHead = NULL;
    
        pHead = create_list(); // 创建一个非循环单链表,并将该链表的头结点的地址赋值给pHead
        // 遍历单链表
        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);
        }
        // pTail代表尾结点,指针域为NULL
        PNODE pTail = pHead;
        pTail->pNext = NULL;
    
        printf("请输入您需要生成的单链表结点的个数: len =");
        scanf("%d", &len);
    
        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;
            // 把新生成的结点挂到pNext指针域上
            // pTail代表最后一个结点,指针域为NULL
            pTail->pNext = pNew;
            pNew->pNext = NULL;
            pTail = pNew;
        }
        return pHead;
    }
    // 遍历单链表
    void traverse_list(PNODE pHead)
    {
        PNODE p = pHead->pNext;
        
        // 如果p不为空,表明p已经指向一个结点了,
        // 如果p为空,表明单链表为空,指向的是空的头结点
        while(p != NULL)
        {
            printf("%d", p->data);
            p = p->pNext; // p往后移
        }
    }
  • 相关阅读:
    jsp mysql 配置线程池
    服务端 模拟 检测 攻击。。乱写
    硕思闪客精灵 7.2 破解版
    unity UnityAwe 插件
    smartfoxserver 2x 解决 Math NAN
    unity 断点下载
    java 监听文件目录修改
    wind7 64 setup appjs
    sfs2x 修改jvm 内存
    unity ngui 解决图层问题
  • 原文地址:https://www.cnblogs.com/lqcdsns/p/6660086.html
Copyright © 2011-2022 走看看