// list.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<conio.h>
using namespace std;
struct ListNode
{
int data;
ListNode *next;
};
//建立单链表
ListNode *creat()
{
ListNode *head,*p,*s;
int x,cycle=1;
head=(ListNode*)malloc(sizeof(ListNode));
p=head;
cout<<"请输入单链表的数据,以0作为结束标识:"<<endl;
while(cycle)
{
cin>>x;
if(x!=0)//以0为标识
{
s=(ListNode *)malloc(sizeof(ListNode));
s->data=x;
p->next=s;
p=s;
}
else cycle=0;
}
head=head->next;
p->next=NULL;
cout<<endl;
return (head);
}
//求单链表的长度
int length(ListNode *head)
{
int n=0;
ListNode *p;
p=head;
while(p!=NULL)
{
p=p->next;
n++;
}
return(n);
}
//输出单链表
void print(ListNode *head)
{
ListNode *p;int n;
n=length(head);
cout<<"现在,长度为"<<n<<"的单链表更新为:"<<endl;
p=head;
if(head!=NULL)
{
while(p!=NULL)
{
cout<<p->data<<'\t';
p=p->next;
}
}
printf("\n");
}
//删除单链表中的某个元素
ListNode *del(ListNode *head,int num)
{
ListNode *p1,*p2;
p1=head;
while(num!=p1->data&&p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(num==p1->data)
{
if(p1==head)
{
head=p1->next;
free(p1);
}
else
p2->next=p1->next;
}
else
cout<<num<<"没有在单链表中找到!"<<endl;//printf("\n%d 没有在单链表中找到!",num);
return head;
}
//在单链表中插入一个元素
ListNode *insert(ListNode *head,int num)
{
ListNode *p0,*p1,*p2;
p1=head;
p0=(ListNode *)malloc(sizeof(ListNode));
p0->data=num;
while(p0->data>p1->data&&p1->next!=NULL)
{
p2=p1;p1=p1->next;
}
if(p0->data<=p1->data)
{
if(head==p1)
{
p0->next=p1;
head=p0;
}
else
{
p2->next=p0;
p0->next=p1;
}
}
else
{
p1->next=p0;
p0->next=NULL;
}
return head;
}
//对单链表从小到大排序:
ListNode *sort(ListNode *head)
{
ListNode *p;
int n;int temp;
n=length(head);
if(head==NULL||head->next==NULL)
return head;
p=head;
for(int j=1;j<n;++j)
{
p=head;
for(int i=0;i<n-j;++i)
{
if(p->data>p->next->data)
{
temp=p->data;
p->data=p->next->data;
p->next->data=temp;
}
p=p->next;
}
}
return head;
}
//对单链表进行逆置
ListNode *reverse(ListNode *head)
{
ListNode *p1,*p2,*p3;
if(head==NULL||head->next==NULL)
return head;
p1=head,p2=p1->next;
while(p2)
{
p3=p2->next;
p2->next=p1;
p1=p2;
p2=p3;
}
head->next=NULL;
head=p1;
return head;
}
int main()
{
ListNode *head;
int n,del_num,insert_num;
head=creat();
print(head);
cout<<"\n请对单链表排序:";
head=sort(head);
print(head);
cout<<"\n请输入单链表中要删除的数据: ";
cin>>del_num;
head=del(head,del_num);
print(head);
cout<<"\n请输入单链表中要插入的数据:";
cin>>insert_num;
head=insert(head,insert_num);
print(head);
cout<<"\n请对单链表进行逆置:";
head=reverse(head);
print(head);
system("pause");
return 0;
}
© 著作权归作者所有
举报
打赏
0 赞
0 收藏
分享
加载中

其他人还在看
今天对软件进行了升级,公众号上重新回复茅台获取最新软件!! 最新软件解压后如图!以管理员方式运行 main.exe <figcaption style="margin: 5px 0px 0px; padding: 0px; max-width: 100%; box-sizing: border-b......
这篇文章我们继续聊分布式相关的内容。 提到分布式系统,就一定绕不开“一致性”,这次我们说说:最终一致性。 最终一致性是现在大部分高可用的分布式系统的核心思路。 估计有人对最终一致性不太熟,先来个简单介...
本文为 #nLive vol.001|美团图数据库平台建设及业务实践# 主题演讲的文字稿,可前往 B站 观看本次视频 大家好,我是来自美团的赵登昌,今天我给大家分享下美团图数据库平台的建设以及业务实践。 这是本次报告的提...
2020年12月,艾瑞咨询发布《DevOps应用发展研究》,对业内企业进行调研,梳理国内DevOps历史脉络、发展现状及展望,内容涵盖DevOps理念解析及行业应用、中国DevOps市场发展状况和中国DevOps应用发展展望。 DevOps...
越努力,越幸运, 本文已收藏在Gitee中JavaCommunity, 里面有面试分享、源码分析系列文章,欢迎收藏,点赞 https://gitee.com/JavaCommunity/JavaCommunity 数据库索引在平时的工作是必备的,怎么建索引,怎么使用...
我是架构精进之路,点击上方“关注”,坚持每天为你分享技术干货,私信我回复“01”,送你一份程序员成长进阶大礼包。 HASH算法介绍 散列函数(英语:Hash function)又称散列算法、哈希函数,是一种从任何一种数...
我是架构精进之路,点击上方“关注”,坚持每天为你分享技术干货,私信我回复“01”,送你一份程序员成长进阶大礼包。 相信大部分人对于团队管理和技术管理在认知上,存在一定隔阂,无形之中会将【管理岗】和【技...
上篇介绍了朴素贝叶斯的原理,本篇来介绍如何用朴素贝叶斯解决实际问题。 朴素贝叶斯最擅长的领域是文本分析,包括: 文本分类 情感分析 垃圾邮件处理 要对文本进行分类,首先要做的是如何提取文本的主要信息,如...
作者 | Liu,Bo 来源|阿里巴巴云原生公众号 前言 常言道,startup 有 startup 的好,大厂有大厂的好,那么大厂究竟好在哪呢?拿硅谷老牌大厂们 FLG 来说,如果要问最令人怀念的是什么?Free food 和基础设施(Infr...
前言 整个Kubernetes技术体系由声明式API以及Controller构成,而kube-apiserver是Kubernetes的声明式api server,并为其它组件交互提供了桥梁。因此加深对kube-apiserver的理解就显得至关重要了。 整体组件功能 ...
选择专区和圈子:{{title}}
{{o.name}}
{{m.name}}