文档章节

单链表的创建、插入、查找、删除、遍历

kimiz
 kimiz
发布于 2013/09/23 13:35
字数 269
阅读 267
收藏 0

#ifndef SINGLELINKEDLIST_H_INCLUDED
#define SINGLELINKEDLIST_H_INCLUDED

typedef struct node {
    int item;
    struct node *next;
} Node, *Link;

Link make_node(int item);

void insert_node(Link p);

Link find_node(int item);

void delete_node(Link p);

void tranverse_node();

#endif // SINGLELINKEDLIST_H_INCLUDED

#include <stdlib.h>
#include <stdio.h>

#include "singlelinkedlist.h"

static Link head = NULL;

Link make_node(int item)
{
    Link p = (Link)malloc(sizeof(Node));
    p->item = item;
    p->next = NULL;
    return p;
}

void insert_node(Link p)
{
    p->next = head;
    head = p;
}

Link find_node(int item)
{
    Link p;
    for (p = head; p; p = p->next) {
        if (p->item == item) {
            return p;
        }
    }
    return NULL;
}

void delete_node(Link p)
{
    /**< method one */
//    if (p == head) {
//        head = p->next;
//    } else {
//        Link pre;
//        for ( pre = head; pre; pre = pre->next ) {
//            if (pre->next == p) {
//                pre->next = p->next;
//                return;
//            }
//        }
//    }

    /**< method two */
    Link *pp;
    for( pp = &head; pp; pp = &(*pp)->next ) {
        if (*pp == p) {
            *pp = p->next;
            free(p);
            return;
        }
    }
}

void tranverse_node()
{
    Link p;
    for (p = head; p; p = p->next) {
        printf("%p:%d\t", p, p->item);
    }
    printf("\n");
}

#include <iostream>

#include "singlelinkedlist.h"

using namespace std;

int main()
{
    Link p;
    for (int i = 0; i < 10; ++i) {
        p = make_node(i);
        insert_node(p);
    }
    tranverse_node();

    p = find_node(2);
    delete_node(p);
    p = find_node(8);
    delete_node(p);
    tranverse_node();

    cout << "Hello world!" << endl;
    return 0;
}

004C10E0:9      004C10D0:8      004C10C0:7      004C10B0:6      004C10A0:5
004C1090:4      004C1080:3      004C1070:2      004C1060:1      004C1050:0

004C10E0:9      004C10C0:7      004C10B0:6      004C10A0:5      004C1090:4
004C1080:3      004C1060:1      004C1050:0
Hello world!

Process returned 0 (0x0)   execution time : 0.019 s
Press any key to continue.


本文转载自:http://learn.akae.cn/media/ch26s01.html#id2844144

共有 人打赏支持
kimiz
粉丝 1
博文 17
码字总数 3593
作品 0
苏州
程序员
私信 提问
单链表(创建,增,删,查,改,打印,销毁链表)

一、单链表(增,删,查,改,打印,销毁链表) 注意链表头的动态,需要改变头指针的先把指针保存起来 1,链表的创建。 2,链表的打印。(循环打印,遇到null则停止) 3,单链表的插入(包括...

qq_38646470
2017/12/14
0
0
链表面试题(上)

一、题目 1、从尾到头打印单链表 (有四种方法) 2、删除一个无头单链表的非尾节点(不能遍历链表) 3、在无头单链表的一个节点前插入一个节点(不能遍历链表) 4、单链表实现约瑟夫环(Joseph...

qq_38646470
01/04
0
0
数据结构与算法--链表(单向链表)

为什么需要链表 顺序表的构建需要预先知道数据大小来申请连续的存储空间,而在进行扩充时又需要进行数据的搬迁,所以使用起来并不是很灵活。 链表结构可以充分利用计算机内存空间,实现灵活的...

墨痕hz
05/28
0
0
经典链表练习题(1)

问题: 从尾到头打印单链表 删除一个无头单链表的非尾节点(不能遍历链表) 在无头单链表的一个节点前插入一个节点(不能遍历链表) 单链表实现约瑟夫环(JosephCircle) 逆置/反转单链表 单链...

triorwy
01/23
0
0
数据结构与算法-C语言篇6-线性表之链式存储结构

数据结构与算法-目录 1、线性表的链式存储结构 1.1、线性表链式存储结构定义 线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素,这组存储单元可以是连续的,也可以是不...

香沙小熊
01/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

mac 下 mysql 8.0.13 安装并记录遇到的问题 以便以后查看

安装 官网mysql 下载地址 安装过程 省去 安装好之后 下载navicat 错误1 链接 遇到 mysql 2003 - Can't connect to MySQL server 错误, 解决方案 重启mysql 服务 #错误2 ERROR 1045: Acces...

杭州-IT攻城狮
昨天
5
0

中国龙-扬科
昨天
1
0
[Spring4.x]基于spring4.x纯注解的Web工程搭建

在前文中已经说明了如何基于 Spring4.x+ 版本开发纯注解的非web项目,链接如下: https://my.oschina.net/morpheusWB/blog/2985600 本文则主要说明,如何在Web项目中,"基于spring纯注解方式...

morpheusWB
昨天
16
0
基础编程题目集-7-13 日K蜡烛图

股票价格涨跌趋势,常用蜡烛图技术中的K线图来表示,分为按日的日K线、按周的周K线、按月的月K线等。以日K线为例,每天股票价格从开盘到收盘走完一天,对应一根蜡烛小图,要表示四个价格:开...

niithub
昨天
5
0
Jenkins window 下的安装使用

1.下载:https://jenkins.io/download/ 双击安装完毕,将自动打开浏览器: http://localhost:8080 打开对应位置的文件,将初始密钥粘贴至输入框。 第一个是 安装默认的软件;第二个是 自定义...

狼王黄师傅
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部