c单链表

#include <stdio.h>
#include <stdlib.h>
#define T 1
#define F -1
typedef int Type;
struct Node
{
    Type value;
    struct Node *next;
};
int init(struct Node **head);            //初始化
int insert_head(struct Node *head, Type value);             // 头插法
int insert_tail(struct Node *head, Type value);                // 尾插法
int insert(struct Node *head, Type index, Type x);          // 在中间插入
int delete(struct Node *head, Type index);                      // 按位删除
int delete_value(struct Node *head, Type x);                  // 按值删除
int change_index(struct Node *head, Type index, Type x);                                    //按位改变
int change_value(struct Node *head, Type old_value, Type new_value);              //按值改变
void search_index(struct Node *head, Type index);       // 按位查值
void search_value(struct Node *head, Type value);       //按值查位
int length(struct Node *head);               // 输出长度
int print(struct Node *head);                  // 输出函数

int main()
{   
    int i;
    int ret;
    struct Node *head;
    ret = init(&head);
    
    for (i = 0; i <= 5; i++)
    {
        insert_head(head, i);    
    }
    print(head);
for (i = 0; i <= 5; i++)
    {
        insert_tail(head, i);    
    }
    print(head);
printf("%d\n", length(head));

    delete(head,2);
    delete(head,length(head) - 1);
    delete(head,0);
    print(head);
insert(head, 3,99);
    insert(head, 0,99);
    insert(head, length(head),99);
    print(head);
 
    delete_value(head, 0);
    print(head);
change_index(head, 4, 101);
    print(head);  
change_value(head, 99, 100);
    print(head);
 
    search_index(head, 7);
    
    search_value(head, 100);
return 0;
}
int init(struct Node **head)
{
    struct Node *newnode = (struct Node *)malloc(sizeof(struct Node));
    if (NULL == newnode)
    {
        return F;
    }
    newnode->value = 0;
    newnode->next = NULL;
    (*head) = newnode;
    return T;
}
int insert_head(struct Node *head, Type value)
{
    struct Node *newnode = (struct Node *)malloc(sizeof(struct Node));
    if (NULL == newnode)
    {
        return F;
    }
    
    newnode->value = value;
    newnode->next = head->next;
    head->next = newnode;
  
    return T;
}
int insert(struct Node *head, Type index, Type x)
{
    if (index < 0 || index > length(head))
    {
        printf("out of range\n");
        return F;
    }
    int i;
    for (i = 0; i < index; i++)
    {
        head = head->next;
    }
    
    struct Node *newnode = (struct Node *)malloc(sizeof(struct Node));
    if (NULL == newnode)
    {
        return F;
    }
    
    newnode->value = x;
    newnode->next = head->next;
    head->next = newnode;
  
    return T;
}  
int insert_tail(struct Node *head, Type value)
{
    struct Node *newnode = (struct Node *)malloc(sizeof(struct Node));
    if (NULL == newnode)
    {
        return F;
    }
    
    newnode->value = value;
    newnode->next = NULL;
    
    while (NULL != head->next)
    {
        head = head->next;
    }
    
    head->next = newnode;
return T;
}
int delete(struct Node *head, Type index)
{
    int i;
    struct Node *temp;
    if (index < 0 || index >= length(head))
    {
        printf("out of range\n");
        return F;
    }
    for (i = 0; i < index; i++)
    {
        head = head->next;
    }
    temp = head->next->next;
    free(head->next);
    head->next = temp;
    
    return T;
}
int delete_value(struct Node *head, Type x)
{
    int i;
    struct Node *temp;
    while (NULL != head->next)
    {
        if(head->next->value == x)
        {
            temp = head->next->next;
            free(head->next);
            head->next = temp;
        }
        else
        {
            head = head->next;
        }
    }
}
int change_index(struct Node *head, Type index, Type x)
{
    int i;
    if (index < 0 || index >= length(head))
    { 
        printf("out of range\n");
        return F;
    }
    for (i = 0; i <= index; i++)
    {
        head = head->next;
    }
    head->value = x;
    
    return T;
}
int change_value(struct Node *head, Type old_value, Type new_value)
{
    int count = 0;
    while (head->next != NULL)
    {
        if(head->next->value == old_value)
        {
            count = 1;
            head->next->value = new_value;
        }
        head = head->next;
    }
    if (count == 0)
    {
        printf("not find\n");
    }
    
    return T;
}
            
void search_index(struct Node *head, Type index)
{
    int i;
    if (index < 0 || index >= length(head))
    {
        printf("out of range\n");
    }
    for (i = 0; i <= index; i++)
    {
        head = head->next;
    }
    printf("%d\n",head->value);
    
}
    
void search_value(struct Node *head, Type value)
{
    int count = 0;
    while (head->next != NULL)
    { 
        if (head->next->value == value)
        {
            printf("%d  ",count);
        }
        head = head->next;
        count++;
    }
    printf("\n");
}
 
int length(struct Node *head)
{
    int count = 0;
    while (NULL != head->next)
    {
        count++;
        head = head->next;
    }
    
    return count;
}
   
int print(struct Node *head)
{
    while (head->next != NULL)
    {
        printf("%d  ", head->next->value);
        head = head->next;
    }
    printf("\n");
}

程序运行结果如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/460375.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

和redis_Redis 缓存

使用场景#Redis 通常用作web应用的内存缓存&#xff0c;和Django&#xff0c;Ruby-on-Rails&#xff0c;Node.js以及Flask框架结合Redis在存储新的数据的过程中可以清除陈旧的数据。Redis使用Less Recently Used(LRU)策略,可以为每个健设置过期时间Redis 存储指标数据用于量化网…

invalid floating point operation什么意思_Point-MVSNet:基于多视角的点云重建网络

Point-Based Multi-View Stereo Network是一篇点云重建领域的文章&#xff0c;其工作内容为通过输入多张不同角度的图片&#xff0c;提取不同的点云特征&#xff0c;再进行融合&#xff0c;从而生成最终的点云。1.介绍Point-MVSNet的大致流程如下&#xff1a;首先生成一个粗略的…

Nonblocking I/O 与 Asynchronous I/O

2019独角兽企业重金招聘Python工程师标准>>> Nonblocking IO 使用的是 polling &#xff08;轮询&#xff09;的方法&#xff08;主动去问&#xff09;&#xff0c; 而 异步IO 使用的是信号机制&#xff08;等待系统通知&#xff09; 转载于:https://my.oschina.ne…

极大似然估计 摘自维基百科

最大似然估计[编辑] 原文地址&#xff1a; http://zh.wikipedia.org/wiki/%E6%9C%80%E5%A4%A7%E4%BC%BC%E7%84%B6%E4%BC%B0%E8%AE%A1 最大似然估计&#xff0c;也称为最大概似估计&#xff0c;是一种统计方法&#xff0c;它用来求一个样本集的相关概率密度函数的参数。这个方…

unity改变图片像素大小_类动森像素画反向转换 (xBR)

起因前阵子沉迷动森&#xff0c;DIY 样式的画风真的超萌(&#xff9f;д&#xff9f;)&#xff89;&#xff0c;恰巧在推上看到有个小姐姐在讨论这个像素画转换的算法&#xff0c;就想在 Unity 里整整。最后实现的镜头特效效果如下图。像素缩放算法常见的像素缩放算法对比图如下…

99 网络编程_传统网络工程师如何利用python实现公司内网IP地址信息查询?

网工圈网络工程师阿龙圈内最早的公益公众号,本号已认证&#xff01;学网络关注我一个就够了(关注近5w)关注听说99%的网工都来这里充电吖关注我&#xff0c;一个老HCIE(编号3558)带你轻松玩网络技术&#xff01; 交个朋友&#xff0c;一起和一个技术狂热者相互交流&#xff0c;共…

[原创]windows server 2012 AD架构试验系列 – 12 配置操作主机

[原创]windows server 2012 AD架构试验系列 – 12 配置操作主机ActiveDirectory支持域中所有域控制器之间的目录数据存储的多主机复制&#xff0c;因此域中的所有域控制器实质上都是对等的。ActiveDirectory支持域中所有域控制器之间的目录数据存储的多主机复制&#xff0c;因此…

笔记本换内存条

步骤一 拆除护盖 笔记本内存插槽上都有护盖保护&#xff0c;首先第一步就是先将护盖拆掉。大多数笔记本的护盖上都有标识&#xff0c;有的是内凹的内存图形&#xff0c;而且从护盖的大小也能看出来&#xff0c;一般内存护盖的大小&#xff0c;就比内存条大一点。当然有不少笔记…

angularJS 指令实践

AngularJS 指令&#xff08;Directives&#xff09;实践指南(1) 2014-03-12 10:22 陈鑫伟 编译 伯乐在线我要评论(0)字号&#xff1a;T|T一个指令用来引入新的HTML语法。指令是DOM元素上的标记&#xff0c;使元素拥有特定的行为。举例来说&#xff0c;静态的HTML不知道如何来创…

数据结构四双向链表

双向链表也叫双链表&#xff0c;是链表的一种&#xff0c;它的每个数据结点中都有两个指针&#xff0c;分别指向直接后继和直接前驱。所以&#xff0c;从双向链表中的任意一个结点开始&#xff0c;都可以很方便地访问它的前驱结点和后继结点。而之前的单链表为单向链表&#xf…

Linux服务器的初步配置流程

开发网站的时候&#xff0c;常常需要自己配置Linux服务器。 本文记录配置Linux服务器的初步流程&#xff0c;也就是系统安装完成后&#xff0c;下一步要做的事情。这主要是我自己的总结和备忘&#xff0c;如果有遗漏&#xff0c;欢迎大家补充。 下面的操作针对Debian/Ubuntu系统…

不要学习代码,要学会思考(转)

英文原文&#xff1a;Dont learn to code, learn to think 译/赖信涛 这是一个人人都在学习编程的时代&#xff1a;Code.org请了比尔盖茨&#xff0c;马克扎克伯格和克里斯波什等这些名人&#xff0c;来告诉你&#xff0c;每个人都可以编程&#xff1b;CoderDojo’s在各个国家悄…

Hadoop的改进实验(中文分词词频统计及英文词频统计)(4/4)

声明&#xff1a; 1&#xff09;本文由我bitpeach原创撰写&#xff0c;转载时请注明出处&#xff0c;侵权必究。 2&#xff09;本小实验工作环境为Windows系统下的百度云&#xff08;联网&#xff09;&#xff0c;和Ubuntu系统的hadoop1-2-1&#xff08;自己提前配好&#xff0…

旋转函数_【视频课】:一次函数拓展应用(图象的平移、旋转、轴对称及5种解题方法)...

请点击上方“出彩数学”可以免费订阅哦停课不停学★ 特别关注&#xff1a;今日头条、西瓜视频——初三中考解题方法与技巧、初一、初二的同步讲解视频&#xff0c;正在陆续上传&#xff0c;请关注今天头条或西瓜视频(下载APP&#xff0c;搜索“出彩数学”&#xff0c;关注即可…

c语言中,关于延迟函数的理解

对于延迟&#xff0c;有些c基础的人都能够做到用for或while来实现 例如&#xff1a; #include <stdio.h>int main() {int i, j, k;for (i 1; i < 1000; i){for (j 1; j < 1000; j){for (k 1; k < 1000; k){}}}printf("hello\n");return 0; }1234…

火山去水印链接_在线批量去水印下载快手图集视频、抖音、火山等平台方法技巧!...

不管是做自媒体还是做电商或是工作素材采集&#xff0c;都离不开视频&#xff0c;视频比文字更好展示出产品、细节内容&#xff0c;就好比我们经常看的抖音、快手、火山、皮皮虾之类的短视频里面就有很多优秀的素材&#xff0c;相信有采集过的朋友都会遇到平台水印这个问题吧&a…

php CI 实战教程:如何去掉index.php目录

Windows下自由创建.htaccess文件的N种方法.htaccess是apache的访问控制文件&#xff0c;apache中httpd.conf的选项配合此文件&#xff0c;完美实现了目录、站点的访问控制&#xff0c;当然最多的还是rewrite功能&#xff0c;即URL重写&#xff0c;PHP中实现伪静态的一个重要途径…

十字连接焊盘_你应该知道的焊盘基础知识

PADSTACK&#xff1a;就是一组PAD的总称。Copper pad&#xff1a;在布线层(routing layer),注意不是内层&#xff0c;任何孔都会带有一个尺寸大于钻孔的铜盘(copper pad)。对内布线层这个铜盘大概14 mils&#xff0c;外布线层更大。如果这里需要导线连接,那么这个可以提供一个可…

平面上最近点对

在二维平面上的n个点中&#xff0c;如何快速的找出最近的一对点&#xff0c;就是最近点对问题。 一种简单的想法是暴力枚举每两个点&#xff0c;记录最小距离&#xff0c;显然&#xff0c;时间复杂度为O(n^2)。 在这里介绍一种时间复杂度为O(nlognlogn)的算法。其实&#xff0c…

Shell脚本中循环语句for,while,until用法

循环语句:BashShell中主要提供了三种循环方式&#xff1a;for、while和until。一、for循环for循环的运作方式&#xff0c;是讲串行的元素意义取出&#xff0c;依序放入指定的变量中&#xff0c;然后重复执行含括的命令区域&#xff08;在do和done 之间&#xff09;&#xff0c;…