单链表的创建、测长、打印、插入、删除、排序及逆置
#include<iostream>
#include<vector>
using namespace std;typedef struct student
{int data;//struct student *next;student *next;
}node;//单链表的建立(带头结点)
node* creat()
{node *p, *s;int x, cycle = 1;node *head = new node();//head->data = 1; //头结点默认值为0,当然这里也可以初始化其值p = head;while (cin>>x&&x!=0) //依次输入结点值,规定当输入为0时结束while循环{s = new node();s->data = x;p->next = s;p = s;}return head;
}//单链表的测长
int length(node *head)
{int len=0;node *p = head;while (p!= NULL){len++;p = p->next;}return len;
}//单链表的打印
void print(node *head)
{node *p = head;while (p != NULL){cout << p->data << " ";p = p->next;}cout << endl;
}//单链表的删除
node *Del(node *head,int num)
{node * p1, *p2;p1 = head;p2 = p1; //p2需要初始化while (num!=p1->data&&p1->next!=NULL){p2 = p1;p1 = p1->next;}if (num == p1->data) {if (p1 == head){head = p1->next; //删除头结点delete p1;}else //删除中间结点{p2->next= p1->next; delete p1;}}else{cout << num << " not found" << endl;}return head;
}//单链表的插入
node *Insert(node * head, int num)
{node *p1,*p2;node *p0 = new node(); //新建待插入结点p0->data = num;p1 = head;p2 = p1;while (p0->data > p1->data&&p1->next != NULL) //假设将待插入结点插在第一个比它小的结点后面{p2 = p1;p1 = p1->next;}if (p0->data <= p1->data) {if (p1 == head) //插在头结点前面{p0->next = p1;head = p0;}else //插入位置为中间结点{p2->next = p0;p0->next = p1;}}else //插在尾结点后面{p1->next = p0;p0->next = NULL;}return head;
}//单链表的排序
node *sortList(node *head)
{int temp;node *p1 = head;int len = length(head);if (head == NULL || head->next == NULL)return head;for (int i = 1; i < len; i++){p1 = head;for (int j = 0; j < len-i; j++){if (p1->data > p1->next->data){temp = p1->data;p1->data = p1->next->data;p1->next->data = temp;}p1 = p1->next;}}return head;
}//单链表的逆置
node *Reverse(node *head)
{node *pNode = head;node *pPre = NULL;node *pReveseNode = NULL;while (pNode != NULL){node *pNext = pNode->next;if (pNext == NULL)pReveseNode = pNode;pNode->next = pPre;pPre = pNode;pNode = pNext;}return pReveseNode;
}int main()
{//创建单链表node *head=creat();//单链表测长int len = length(head);//打印单链表print(head);//单链表删除指定结点int num1;cin >> num1;node *head2=Del(head,num1);print(head2);//单链表插入结点int num2;cin >> num2;node *head3 = Insert(head, num2);print(head3);//单链表的排序node *head4 = sortList(head);print(head4);//逆置单链表node *head5 = Reverse(head);print(head5);
}
单链表的创建、测长、打印、插入、删除、排序及逆置相关推荐
- 单链表的创建,插入,删除以及查找
本文章依据学校的实验作业完成 目录 前言 一.链表是什么? 1.概念 2.链表的分类 二.单链表的创建,插入,删除以及查找 1.单链表的存储结构 2.单链表的创建 3.单链表的插入 4.单链表的删除 ...
- 单链表的创建、删除、反转、插入、排序操作
单链表的创建.删除.反转.插入.排序操作 文章目录 单链表的创建.删除.反转.插入.排序操作 1.1 链表引言 1.2 单链表节点的数据结构 1.3 创建链表 1.4 打印整个链表 1.5 链表插入数 ...
- 单链表的创建、插入、删除、倒置操作
/*-----------------------------------------------------*/ /*--------------单链表的创建.插入.删除.倒置操作--------- ...
- 线性表的基本操作及应用(单链表的创建、插入、删除、查找、显示)
1.实现单链表的创建:2.实现单链表的插入:3.实现单链表的删除:4.实现单链表的查找:5.实现单链表的显示 #include <stdio.h> #include <stdlib. ...
- 不懂你打我,超简单的单链表的创建
数据结构有人熬过了复杂度,熬过了顺序表,就卡在链表这里,其实也不难,我也是菜鸟,所以我会用通俗易懂的东西给大家解释!这里我们先实现一个单链表! 结点:有指针域和数据域 下面我们先了解一下链表的逻辑结构 ...
- 单链表的创建--从零开始
2021.2.14更新 结合很多小伙伴的困惑,博主录制了一个视频讲解,如果大家感兴趣,欢迎跳转到我的b站视频<单链表的创建-从零开始>(P.S.这是我录制的第一个视频,因为是在晚上,怕打扰 ...
- java增加 删除 修改表格_Java实现单链表的创建、添加、修改、删除
packagelinkedlist;//单链表的创建.添加插入.修改.删除 public classSingleLinkedListDemo {public static voidmain(Strin ...
- python单链表操作_单链表的创建、增删改查等操作(Python实现)
单链表的创建.增删改查等操作(Python实现) # 单链表 class Node: def __init__(self, elem): self.elem = elem self.next = No ...
- 用C++实现单链表的创建、逆置和输出 的两种方法
http://blog.csdn.net/lfeng_coding/article/details/47300563 题目描述:在已知单链表头节点的情况下,设计算法逆置单链表并输出 方法一:采用首先将 ...
- 数据结构:单链表中在P结点前插入S结点
标题:数据结构:单链表中在P结点前插入S结点 在数据结构的习题中偶然看到了一个题目 已知在单链表中P不是首元结点也不是尾元结点,在P结点前插入S结点 #include<stdio.h> # ...
最新文章
- android layout analyze
- 聚焦AI发展 | 这可能是今年最干货的线上分享会了
- jmeter导入已有的脚本_jmeter导入badboy录制的脚本
- 有没有测试水泥稳定性的软件,水泥稳定碎石土7天无侧限抗压强度制件(参考模板)...
- 当前安卓App加固到底该如何做到防篡改?
- 负载均衡—算法/策略
- 简单粗暴地理解js原型链--js面向对象编程
- SpringBoot整合(Elasticserch)
- Linux根据启动程序文件名称进行批量结束任务
- c++指针各种用法小结
- Linux内存管理的设计与实现,Linux内核设计与实现-内存管理学习小结
- html实现“加入收藏”代码
- Linux下报ora-12162,登录RMAN 报ORA-12162:TNS:net service name is incorrectly specified错误
- C语言期末复习不挂科(快速入门)(和bug郭一起学C系列1)
- 你知道怎么给客户朋友圈点赞吗?
- 染发染膏的认识与使用
- 爬虫与反爬虫,永恒的道高一尺魔高一丈
- JAVA调用Excel公式和js判断选择计算有效集合
- js base64加密 java base64解密_JS base64 加密和 后台 base64解密(防止中文乱码)
- C# 如何避免装箱和拆箱操作
热门文章
- 从delegate到lambda表达式
- 在ISA2006以SSL-TO-HTTP方式发布内部的WEB服务器(二)
- 421. 数组中两个数的最大异或值
- android 时钟动态图标,Android 8.1 Launcher3实现动态指针时钟功能
- linux ras目录,Linux下配置站点-FTP-RSA私钥-公钥
- fcm模糊聚类matlab实例_MATLAB图论实例——最短路径
- 借贷宝java_【人人行(借贷宝)Java面试】借贷宝java后端开发面经。-看准网
- this.scrollheight获取textarea的高度是0_53小米电子时钟/v1.0 介绍
- python属性赋值和赋值_python赋值和地址
- 培训协议与服务器有没有要求,上面说的是提供专业培训且规定了服务器和培训费以及违约金的问题。试用期辞职单位有没有权利追究违约金呢?- 法律快车法律咨询...