无表头单链表增删改查操作

1、返回单链表中第pos个结点中的元素,若pos超出范围,则返回0
2、把单链表中第pos个结点的值修改为x的值,若修改成功返回1,否则返回0
3、向单链表的表头插入一个元素
4、向单链表的末尾添加一个元素

5、向单链表中第pos个结点位置插入元素为x的结点,若插入成功返回1,否则返回0

6、向有序单链表中插入元素x结点,使得插入后仍然有序

7、从单链表中删除表头结点,并把该结点的值返回,若删除失败则返回0
8、从单链表中删除表尾结点并返回它的值,若删除失败则返回0

 

#include <stdio.h>
#include <string.h>
#include <stdlib.h>typedef int Element;
//定义节点结构
struct node
{Element data;    //数据域struct node *next;//指针域
};typedef struct node LinkNode;
//创建单链表--不带头节点
LinkNode * createLinkList();
LinkNode * createLinkList()
{LinkNode *head = NULL;  //LinkNode *tail = NULL;  //LinkNode *temp = NULL;  //临时的节点,指向当前创建的元素int data;scanf("%d",&data);while (data){temp = (LinkNode *)malloc(sizeof(LinkNode));    //temp指向该申请内存,下一次temp指向一个新的内存if (!temp)          //申请失败
        {printf("malloc failed.....");}else                         //申请成功
        {temp->data = data;       //写入数据到temp数据域中temp->next = NULL;       //写入数据到temp指针域中
        }if (head == NULL)           //头为空的时候
        {head = temp;            //头指针指向temptail = temp;            //尾指针指向temp
        }else                        //头不为空的时候
        {tail->next = temp;      //将temp赋给指针域,下一次作next域连上data域tail = temp;            //尾指针指向temp
        }scanf("%d",&data);//接着输入下一个值,输入0就结束
    }return head;
}//输出单链表
void printLinkList(LinkNode *head);
void printLinkList(LinkNode *head)
{LinkNode *p = head;while (p){printf("%d\t",p->data);p = p->next;}
}//求链表长度
int length(LinkNode *head);
int length(LinkNode *head)
{int len = 0;LinkNode *p = head;while (p){len++;p = p->next;}return len;
}
//1int modifyElement(LinkNode *head,int pop,int newElement);
int modifyElement(LinkNode *head,int pop,int newElement)
{int succss = 0;if (pop <= 0 || pop > length(head)){printf("oops:pos is invalid");return succss;}LinkNode *p = head;for (int i = 0; i < pop - 1; i++){p = p->next;}if (p){p ->data = newElement;succss = 1;}return succss;
}//2(重点)
int insertElementToHead(LinkNode **head,Element e);
int insertElementToHead(LinkNode **head,Element e)
{int success = 0;LinkNode *tmp = NULL;if (e){tmp = (LinkNode *)malloc(sizeof(LinkNode));tmp->data = e;tmp->next = NULL;}else{printf("zero is invalid");return 0;}//通过指针修改(重点)tmp->next = *head;   //连接*head = tmp;          //修改地址return success;
}//3
int insertElementToEnd(LinkNode *head,Element e);
int insertElementToEnd(LinkNode *head,Element e)
{int success = 0;LinkNode *p = head;LinkNode *tmp = NULL;if(e){tmp = (LinkNode *)malloc(sizeof(LinkNode));tmp->data = e;tmp->next = NULL;}else{printf("zero is invalid");return 0;}while (p && p->next) {p = p->next;}p->next = tmp;return success;
}int insertElementToPos(LinkNode *head,Element e,int pos);
int insertElementToPos(LinkNode *head,Element e,int pos)
{int success = 0;LinkNode *p = head;LinkNode *tmp = NULL;if (pos <= 0 && pos >length(head)){return success;}for (int i = 0; i < pos -2; i++) {p = p->next;}tmp = (LinkNode *)malloc(sizeof(LinkNode));tmp->data = e;tmp->next = NULL;if (p){tmp->next = p->next;p->next = tmp;success = 1;}return success;
}int insertOrderLinkList(LinkNode *head,Element x);
int insertOrderLinkList(LinkNode *head,Element x)
{int success = 0;LinkNode *p = head;int loc = 1;while (p){if(p->data < x){p = p->next;loc++;}else{break;}}//此处还要分3种情况头尾中间success = insertElementToPos(head,x,loc);return success;
}int deleteHeadNode(LinkNode **head);
int deleteHeadNode(LinkNode **head)
{int data = 0;LinkNode *p = *head;data = p->data;*head = p->next;return data;}int deleteEndNode(LinkNode *head);
int deleteEndNode(LinkNode *head)
{LinkNode *p = head;LinkNode *q = NULL;int data = 0;for (int i = 0; i < length(head) - 2 ; i++){p = p->next;}q = p->next;data = q->data;p->next = NULL;free(q);return data;
}int main(int argc, const char * argv[])
{LinkNode *head = NULL;head=createLinkList();printLinkList(head);printf("len = %d\n",length(head));/*//1modifyElement(head,2,54);printLinkList(head);printf("\n");insertElementToHead(&head,90);//printLinkList(head);printf("\n");insertElementToEnd(head,70);printLinkList(head);printf("\n");insertElementToPos(head,100,3);printLinkList(head);printf("\n");
*/insertOrderLinkList(head,23);//此时需表是有序的,输入10到50内数
    printLinkList(head);printf("\n");deleteHeadNode(&head);printLinkList(head);printf("\n");deleteEndNode(head);printLinkList(head);return 0;
}

 

 

转载于:https://www.cnblogs.com/huen/p/3497532.html

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

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

相关文章

JBU联合双边上采样

很多图像处理算法&#xff0c;如立体视觉中的深度估计&#xff0c;图像上色&#xff0c;高动态范围HDR中的tone mapping&#xff0c;图像分割&#xff0c;都有一个共性的问题&#xff1a;寻找一个全局的解&#xff0c;这个解是指一个分段的piecewise平滑含糊&#xff0c;描述了…

技术阅读周刊第十一期

技术阅读周刊&#xff0c;每周更新。 历史更新 20231124&#xff1a;第七期20231201&#xff1a;第八期20231215&#xff1a;第十‍期 A Comprehensive guide to Spring Boot 3.2 with Java 21, Virtual Threads, Spring Security, PostgreSQL, Flyway, Caching, Micrometer, O…

数据智能是大数据的未来

来源&#xff1a;中国信息产业网 近日&#xff0c;两家大数据领域的代表性企业Cloudera和Hortonworks宣布了它们相对平等的合并&#xff0c;宣称新公司将创建世界领先的下一代数据平台并提供业界首个企业数据云&#xff0c;这令很多人感到意外&#xff0c;大数据的未来何去何从…

利用GAN原始框架生成手写数字

这一篇GAN文章只是让产生的结果尽量真实&#xff0c;还不能分类。 本次手写数字GAN的思想&#xff1a; 对于辨别器&#xff0c;利用真实的手写数字&#xff08;真样本&#xff0c;对应的标签为真标签&#xff09;和随机噪声经过生成器产生的样本&#xff08;假样本&#xff0…

DL也懂纹理吗——图像的纹理特征

工作中遇到一个问题&#xff1a;对于同一场景&#xff0c;训练好的DL模型能把大部分样本分类准确&#xff0c;而对于少量负样本&#xff0c;DL会错分到另外一个对立的类中。错分的样本可以认为是难分的样本&#xff0c;但是我们还想知道这两种样本到底是哪里的差异导致DL做出了…

排序算法--(冒泡排序,插入排序,选择排序,归并排序,快速排序,桶排序,计数排序,基数排序)

一.时间复杂度分析 - **时间复杂度**&#xff1a;对排序数据的总的操作次数。反应当n变化时&#xff0c;操作次数呈现什么规律 - **空间复杂度**&#xff1a;算法在计算机内执行时所需要的存储空间的容量&#xff0c;它也是数据规模n的函数。 1.例题: 有一个字符串数组&…

肠里细菌“肚里蛔虫”:肠脑研究缘何越来越热

来源&#xff1a;科学网最懂你大脑的&#xff0c;可能不是“肚子里的蛔虫”&#xff0c;而是肠子里的细菌——肠道菌群对神经系统、心理和行为方面的影响正成为一个新兴热点领域。在日前举办的美国神经科学学会年会上&#xff0c;一张海报上的大脑切片显微镜图像显示&#xff0…

SVM原理与实战

先看线性可分问题。对于线性可分&#xff0c;其实感知机就可以解决。但是感知机只是找到一个超平面将数据分开&#xff0c;而这样的超平面可能是平行的无限多个&#xff0c;我们需要在这其中找到最优的一个。怎么衡量一个超平面是不是最优的呢&#xff0c;直观上讲&#xff0c;…

2014-01-01

一:HyperlinkButton点击后打开新窗口的方法 1,直接在界面中写这段代码就可以了: <HyperlinkButton NavigateUri"http://www.cnblogs.com/wsdj-ITtech/" Content"Click Me" TargetName"_blank" FontSize"28" Height"50"…

李飞飞高徒:斯坦福如何打造基于视觉的智能医院?

作者&#xff1a;Albert Haque、Michelle Guo来源&#xff1a;机器之心自 2009 年担任斯坦福人工智能实验室和视觉实验室的负责人&#xff0c;李飞飞在推动计算机视觉方面研究的同时&#xff0c;还密切关注 AI 医疗的发展。昨日&#xff0c;李飞飞离任斯坦福 AI 实验室负责人一…

tensorflow知识点

一.bazel编译tensorflow注意版本号: 在/tensorflow/tensorflow/configure.py 查看bazel版本号 https://github.com/tensorflow/tensorflow https://github.com/bazelbuild/bazel/releases?after0.26.1 https://tensorflow.google.cn/ 二&#xff0c;基础知识点 1.打印出…

eclipse中如何导入jar包

如图&#xff0c;首先右键点击项目&#xff0c;选择最下面的properties&#xff0c; 然后进去之后点击java build path&#xff0c;右边会出来4个选项卡&#xff0c;选择libraries&#xff0c; 这时候最右边会有多个选项&#xff0c;第一个add jars是添加项目文件中的jar包&…

线性-LR-softmax傻傻分不清楚

softmax 对于分类网络&#xff0c;最后一层往往是全连接层&#xff0c;如果是N分类&#xff0c;那么最终的全连接层有N个结点。很显然&#xff0c;每个节点对应一个类&#xff0c;该节点的权重越大&#xff0c;说明网络越倾向于认为输入样本属于该类。这其实就是Softmax的思想…

一图看懂国外智能网联汽车传感器产业发展!

来源&#xff1a;赛迪智库编辑&#xff1a;煜 佳未来智能实验室是人工智能学家与科学院相关机构联合成立的人工智能&#xff0c;互联网和脑科学交叉研究机构。未来智能实验室的主要工作包括&#xff1a;建立AI智能系统智商评测体系&#xff0c;开展世界人工智能智商评测&#…

Centos6的VSFTP服务器配置使用教程

Centos 6 的VSFTP 关闭SELinux&#xff0c;在终端机输入 vi /etc/selinux/config SELINUXenforcing 改成 SELINUXdisabled 关闭selinux&#xff0c;接著输入 setenforce 0 传送资料的需要&#xff0c;可以暂时开放root的权限 vi /etc/vsftpd/user_list #root service vsftpd re…

深度学习中的信息论——交叉熵

信息量 可以说就信息量是在将信息量化。首先信息的相对多少是有切实体会的&#xff0c;有的人一句话能包含很多信息&#xff0c;有的人说了等于没说。我们还可以直观地感觉到信息的多少和概率是有关的&#xff0c;概率大的信息也相对低一些。为了量化信息&#xff0c;一个做法…

传统手工特征--opencv

一&#xff0c;颜色特征&#xff1a; 简单点来说就是将一幅图上的各个像素点颜色统计出来&#xff0c;适用颜色空间&#xff1a;RGB&#xff0c;HSV等颜色空间&#xff0c; 具体操作&#xff1a;量化颜色空间&#xff0c;每个单元&#xff08;bin&#xff09;由单元中心代表&…

特写李飞飞:她激励了人工智能的发展,更要给人工智能赋予人的价值

文 | MrBear 编辑 | 杨晓凡来源&#xff1a;雷锋网摘要&#xff1a;李飞飞无疑是人工智能界最响亮的名字之一。她既对机器学习领域的发展做出了杰出的贡献&#xff0c;也是普通大众眼中温和的人工智能技术宣扬者&#xff0c;还是谷歌这一科技巨头的人工智能技术领导人之一。WI…

Chap-4 Section 4.2.4 指令修正方式

对于X86平台下的ELF文件的重定位入口所修正的指令寻址方式只有两种&#xff1a;绝对近址32寻址和相对近址32寻址。 这两种指令修正方式每个被修正的位置的长度都为32位&#xff0c;即4个字节&#xff0c;而且都是近址寻址&#xff0c;不用考虑Intel的段间远址寻址。r_info成员的…

没见过女人的小和尚——SVDD

是的&#xff0c;即便是出生在山上的小和尚&#xff0c;从来没有下过山&#xff0c;没有见过女人&#xff0c;但是一旦有女施主上山&#xff0c;小和尚依然可以轻松地区分出眼前的人是如此不同。 传统的SVM是寻找一个超平面&#xff0c;而SVDD寻找的超平面更进一步&#xff0c…