单链表的插入伪算法和用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个结点的值:\n", 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往后移
    }
}
时间: 2024-08-01 19:21:24

单链表的插入伪算法和用C语言创建单链表,并遍历的相关文章

c语言创建单链表

//创建单链表 #include <stdio.h>#include <string.h>#include <stdlib.h>typedef struct Student STU; //用typedef 新定义结构体名字为 STU:struct Student //定义时不能直接用STU{ char name[20]; float score; STU* next;// 定义指向结构体的指针}; int main(){ STU a, b, c, *P, *head; 

单源最短路径算法——Bellman-ford算法和Dijkstra算法

 BellMan-ford算法描述 1.初始化:将除源点外的所有顶点的最短距离估计值 dist[v] ← +∞, dist[s] ←0; 2.迭代求解:反复对边集E中的每条边进行松弛操作,使得顶点集V中的每个顶点v的最短距离估计值逐步逼近其最短距离:(运行|v|-1次) 3.检验负权回路:判断边集E中的每一条边的两个端点是否收敛.如果存在未收敛的顶点,则算法返回false,表明问题无解:否则算法返回true,并且从源点可达的顶点v的最短距离保存在 dist[v]中. 1 BELLMAN-FORD

C语言之单向链表

1,单向链简洁.单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始:链表是使用指针进行构造的列表:又称为结点列表,因为链表是由一个个结点组装起来的:其中每个结点都有指针成员变量指列表中的下一个结点:?列表是由结点构成,由head指针指向第一个成为表头的结点而终止于最后一个指向nuLL的指针: 2,例子要求:根据示例代码中的例子,完成单向链表(single linked list)中的以字符串为数据的链表的插入.删除以及查找,并支持单向链表的反转:

七天学会ASP.NET MVC(七)——创建单页应用

注:本文为学习摘录,原文地址为:http://www.cnblogs.com/powertoolsteam/p/MVC_Seven.html 目录 引言 最后一篇学什么 实验32—整理项目组织结构 关于实验32 实验33——创建单页应用——第一部分—安装 什么是Areas? 关于实验33 实验34——创建单页应用——第二部分—显示Employee 实验35——创建单页应用——第三部分—新建Employee 实验36——创建单页应用——第三部分—上传 实验32 ———整理项目组织结构 实验32与其

「C语言」单链表/双向链表的建立/遍历/插入/删除

最近临近期末的C语言课程设计比平时练习作业一下难了不止一个档次,第一次接触到了C语言的框架开发,了解了View(界面层).Service(业务逻辑层).Persistence(持久化层)的分离和耦合,一种面向过程的MVC的感觉. 而这一切的基础就在于对链表的创建.删除.输出.写入文件.从文件读出...... 本篇文章在于巩固链表的基础知识(整理自<C语言程序设计教程--人民邮电出版社>第十章),只对链表的概念及增删改查作出探讨,欢迎指教. 一.链表结构和静态/动态链表 二.单链表的建立与遍历

单链表实现“插入”和“删除”操作

在单链表中,又如何实现"插入"和"删除"操作呢? 插入操作: 假设我们要在线性表的两个数据元素a和b之间插入一个数据元素x,已知p为其单链表存储结构中指向结点a的指针.为插入数据元素x,首先要生成一个数据域为x的结点,然后插入在单链表中.根据插入操作的逻辑定义,还需修改结点a中的指针域,令其指向结点x,而结点x中的指针域应该指向b结点,从而实现3个元素a,b和x之间逻辑关系的变化. 假设s为指向结点x的指针.则上述指针修改用语句描述即为: s->next=p-

C语言实现单链表的节点插入(带头结点)

我在之前一篇博客<C语言实现单链表(不带头结点)节点的插入>中具体实现了怎样在一个不带头结点的单链表中进行节点的插入.可是在实际应用中,带头结点的链表更为经常使用.更为方便.今天我们就要来使用带头结点的单链表进行节点的插入.演示样例代码上传至 https://github.com/chenyufeng1991/InsertList_HeadNode  . 核心代码例如以下: Node *InsertNode(Node *pNode,int pos,int x){ int i = 0; Node

单链表顺序插入

向单链表中插入新元素,并保证插入后,元素是有序的. [程序实例] 1 struct ListNode 2 { 3 int val; 4 ListNode *next; 5 }; 6 7 bool sll_insert(ListNode **root, int value) 8 { 9 ListNode *PrevNode =NULL; 10 ListNode *Current = *root; 11 12 while (Current!=NULL && Current->val<

带头节点的单链表的插入操作

1.偶然看到了十字链表的应用,想到之前在<数据结构与算法分析>的链表一章中,需要用多重表实现一个简单的查询功能.功能需求如下: “已知 学生 和 学校课程 总数 分别为 40000 和 2500,现在需要得到两份报告,一份显示每门课成注册的所有学生信息, 一份显示每个学生注册了哪些课程.” 显然可以用一个 40000 * 2500 个元素的二维数组来解决,但是每个学生选课数目很少,因此会浪费很多空间.因此选择十字链表来实现. 既然是链表,那么肯定要有插入操作,于是便有了本文.算是对功能实现前的