linux C学习笔记03--单链表

单链表一直是程序员的基础,我也来复习下,下面是link.c中的代码,供main.c 调用,代码很简单,单链表的插入,删除,查找和遍历输出,

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

typedef struct link{
    int data;
    struct link* next;
}*LINK;

int insert_link(LINK* head,int data);
int print(LINK head);
int delete_node(LINK *head,int n);
int find_node(LINK head,int n);

int insert_link(LINK* head,int data)
{
    LINK node = (LINK)malloc(sizeof(struct link));
    LINK tmp = NULL;

    if(node != NULL)
    {
        node->data = data;
        node->next = NULL;
    }
    else
    {
        printf("malloc new node error!\n");
        return -1;
    }

    if(*head == NULL)
    {
        *head = node;
        return 0;
    }

    tmp = *head;
    while(tmp->next != NULL)    //find ending node
    {
        tmp = tmp->next;
    }
    tmp->next = node;

    return 0;
}

int print(LINK head)
{
    LINK tmp = head;
    while(tmp != NULL)
    {
        printf("%d \n",tmp->data);
        tmp = tmp->next;
    }

    return 0;
}

int    delete_node(LINK *head,int n)    //delete the node of index is n
{
    LINK tmp = *head;
    LINK save = tmp;
    int i = 0;

    if(n == 1)
    {
        tmp = tmp->next;
        free(save);
        *head = tmp;
        return 0;
    }

    while(tmp != NULL)
    {
        if(i == n-1)            {
            save->next = tmp->next;
            free(tmp);
            break;
        }

        save = tmp;
        tmp = tmp->next;
        i++;
    }    

    if(n-1 > i)
    {
        printf("error: delete %d is out of length\n",n);
        return -1;
    }

    return 0;
}

int find_node(LINK head,int n)
{
    LINK tmp = head;
    int data = 0;
    int i = 0;

    while(tmp != NULL)
    {
        if(i == n-1)
        {
            data = tmp->data;
            break;
        }
        tmp = tmp->next;
        i++;
    }

    if(n-1 > i)
    {
        printf("find_node error: out of link length\n");
        return -1;
    }

    return data;
}

接着是main.c:

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

typedef struct link{
    int data;
    struct link* next;
}*LINK;

extern int insert_link(LINK* head,int data);
extern int print(LINK head);
extern int delete_node(LINK *head,int n);
extern int find_node(LINK head,int n);

int main(int argc,char* argv[])
{
    LINK phead = NULL;

    insert_link(&phead,1);
    insert_link(&phead,2);
    insert_link(&phead,3);
    insert_link(&phead,4);
    insert_link(&phead,5);
    insert_link(&phead,6);

    print(phead);
    delete_node(&phead,1);                //delete the node by index
    print(phead);
    delete_node(&phead,2);                //delete the node by index
    print(phead);
    delete_node(&phead,1);                //delete the node by index
    print(phead);

    printf("find node 6 is %d\n",find_node(phead,6));        //finding the node by index

    return 0;
}
时间: 2024-10-21 13:49:42

linux C学习笔记03--单链表的相关文章

学习笔记:单链表实现多项式相乘(一)

单链表实现多项式相乘,有这样的一个思路可以参考: 实现多项式相乘,最关键的是系数和指数的两个数据,这里命名为coef和HighPower. 最简便的办法是使用两个嵌套循环例如(3x^2+4x^1)(x^2+2x^4)用3x^2遍历另外一个括号内的数据,同时实现本身括号内的遍历. 这个想法的核心程序可归纳为以下: while(pList!=NULL){ while(pList2!=NULL){ pNew=(PNODE)malloc(sizeof(NODE)); pNew->pNext=NULL;

linux 驱动学习笔记04--简单驱动

首先贴代码helloworld.c和Makefile /************************************************************************* > File Name: helloworld.c > Author: hailin.ma > Mail: > Created Time: Wed 15 Jul 2015 02:39:35 PM CST ***************************************

Linux程序设计学习笔记----System V进程通信之消息队列

一个或多个进程可向消息队列写入消息,而一个或多个进程可从消息队列中读取消息,这种进程间通讯机制通常使用在客户/服务器模型中,客户向服务器发送请求消息,服务器读取消息并执行相应请求.在许多微内核结构的操作系统中,内核和各组件之间的基本通讯方式就是消息队列.例如,在 MINIX 操作系统中,内核.I/O 任务.服务器进程和用户进程之间就是通过消息队列实现通讯的. Linux中的消息可以被描述成在内核地址空间的一个内部链表,每一个消息队列由一个IPC的标识号唯一的标识.Linux 为系统中所有的消息队

Linux 程序设计学习笔记----文件管理系统

本文部分整理自网络 Linux下文件系统管理 1.VFS文件系统概述 linux采用VFS来管理文件系统,而且linux设计的原则之一就是everything is file.因此文件管理系统是linux设计最核心的体现. VFS的全称是Virtual File System (虚拟文件系统). 总体上说 Linux 下的文件系统主要可分为三大块:一是上层的文件系统的系统调用,二是虚拟文件系统 VFS(Virtual Filesystem Switch),三是挂载到 VFS 中的各实际文件系统,

linux kernel学习笔记-5内存管理(转)

http://blog.sina.com.cn/s/blog_65373f1401019dtz.htmllinux kernel学习笔记-5 内存管理1. 相关的数据结构 相比用户空间而言,在内核中分配内存往往受到更多的限制,比如内核中很多情况下不能睡眠,此外处理内存分配失败也不像用户空间那么容易.内核使用了页和区两种数据结构来管理内存: 1.1 页 内核把物理页作为内存管理的基本单位.尽管CPU的最小可寻址单位通常为字(甚至字节),但是MMU(内存管理单元,管理内存并把虚拟地址转换为物理地址的

Linux netfilter 学习笔记 之十二 ip层netfilter的NAT模块代码分析

本节主要是分析NAT模块相关的hook函数与target函数,主要是理清NAT模块实现的原理等. 1.NAT相关的hook函数分析 NAT模块主要是在NF_IP_PREROUTING.NF_IP_POSTROUTING.NF_IP_LOCAL_OUT.NF_IP_LOCAL_IN四个节点上进行NAT操作,在上一节中我们知道nat表中只有PREROUTING.POSTROUTING.LOCAL_OUT三条链,而没有NF_IP_LOCAL_IN链,所以不能创建在LOCAL_IN hook点的SNAT

Linux 操作系统学习笔记

一,unix 1.unix 特点 伸缩性强,开放性好, 2.基本原则 所有对象,硬件都是文件 配置数据以文本形式保存 短小的单目的程序构成 多个程序合作完成复杂任务 3.gnu 基本原则是共享,建立自由开放的unix系统 1984年 richard stallman 发起 基本体系是micro kernel 4.gpl Copyleft 原作者所有权 5.linux起源 Linustorvalds, 自由的类unix操作系统, 遵循gnu和gpl 6.linux 可以实现unix功能 遵循开源许

Linux 程序设计学习笔记----Linux下文件类型和属性管理

转载请注明出处:http://blog.csdn.net/suool/article/details/38318225 部分内容整理自网络,在此感谢各位大神. Linux文件类型和权限 数据表示 文件属性存储结构体Inode的成员变量i_mode存储着该文件的文件类型和权限信息.该变量为short int类型. 这个16位变量的各个位功能划分为: 第0-8位为权限位,为别对应拥有者(user),同组其他用户(group)和其他用户(other)的读R写W和执行X权限. 第9-11位是权限修饰位,

C++ GUI Qt4学习笔记03

C++ GUI Qt4学习笔记03 qtc++spreadsheet文档工具resources 本章介绍创建Spreadsheet应用程序的主窗口 1.子类化QMainWindow 通过子类化QMainWindow可以创建一个窗口 图形用户界面(GUI)应用程序通常会使用很多的图片,最常见的为应用程序提供图片的方法是使用Qt的资源机制(resource mechanism) 使用Qt资源系统,必须创建一个资源文件,并且在识别该资源文件的.pro文件中添加一行代码. RESOURCES = spr

linux基础学习笔记——操作大全

作者:liaoyi 更新时间:2014-6-2 ****************基本操作***************** 关机 shutdown -h now    root用户               init 0              root用户halt      root+一般用户poweroff 重启shutdown -r now    root用户init6     root用户reboot            root+一般用户 注意:1.shutdown 比较灵活,可