问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

...输出该单链表,然后插入元素X保持单链表的升序排列,输..._百度...

发布网友 发布时间:2024-10-03 11:45

我来回答

5个回答

热心网友 时间:2024-10-14 14:24

楼主你好,我写了一个程序,应该能满足你的上述要求,希望能帮到你的忙~!
#include<stdio.h>
#include<stdlib.h>
struct Node
{
int data;
struct Node *next;
};

void insert(struct Node *L,int x)//函数的功能是将x插入到链表L中的合适位置,使链表保持升序
{
struct Node *p = L->next,*p1 = L,*q;//p指向链表的第一个非头结点,p1指向其之前的结点
q = (struct Node *)malloc(sizeof(struct Node));//q指向一个新分配的结点
if (L->next == NULL) //链表为空,则将x作为第一个元素直接插入链表
{
L->next = q;
q->data = x;
q->next = NULL;
return ;
}
while(p && (p->data < x))//否则寻找适合x的插入位置
{
p1 = p;//p1保存的是p之前的结点
p = p->next;
}//循环结束后p指向一个空位置或首个大于x的结点
if (p)//若p没指向一个空位置
{
q->data = x;
p1->next = q;
q->next = p;
}
else
{
q->data = x;
p1->next = q;
q->next = NULL;
}
}
int main()
{
int num;
struct Node *L,*p;
L = (struct Node *)malloc(sizeof(struct Node));
L->next = NULL;
printf("开始创建单链表,请输入链表元素(正整数),输入-1代表结束:\n");

while(scanf("%d",&num) && (num != -1))
{
insert(L,num);
}
p = L->next;
printf("链表中的元素已排列插入完毕.所有的元素为\n");
while(p!=NULL)
{
printf("%d ",p->data);
p = p->next;
}
printf("\n");
return 0;
}

热心网友 时间:2024-10-14 14:23

#include <iostream>

using namespace std;

int main()
{
cout << "Hello world!" << endl;
return 0;
}

热心网友 时间:2024-10-14 14:18

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

typedef struct list {
int elem;
struct list * next;
}L;

int main() {
L * l, * p, * q;int a, X;
l = ( L * ) malloc ( sizeof( L ) );L->next = NULL;
/* 输入十个元素 */
for (i = 0;i < 10;i++) {
scanf("%d", &a);
for (p = l;p->next != NULL;p = p->next) {
if (p->next->elem <= a) {break;}
}
q = ( L * ) malloc ( sizeof( L ) );q->elem = a;
q->next = p->next;p->next = q;
}
for (p = l;p->next != NULL;p = p->next) {
printf("%d\n", p->next->elem);
}
/* 输入要插入的元素X */
scanf("%d", &X);
for (p = l;p->next != NULL;p = p->next) {
if (p-.next->elem <= X) {break;}
}
q = ( L * ) malloc ( sizeof( L ) );q->elem = X;
q->next = p->next;p->next = q;
for (p = l;p->next != NULL;p = p->next) {
printf("%d\n", p->next->elem);
}

return 0;
}

热心网友 时间:2024-10-14 14:23

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

typedef struct db_node {
int data;
struct db_node *next;
}node,*pnode;

pnode init() //创建链表头
{
pnode head = NULL;

head = (pnode)malloc(sizeof(node));
if(head == NULL)
{
printf("memeroy error!\n");
exit(0);
}
head->data = 0;
head->next = NULL;
return head;
}

pnode swap_insert(pnode p,pnode s) //排序插入
{
pnode q;
pnode swap = p;

if(p->next == NULL) //只有一个元素时,比较一次
{
if(s->data < p->data)
{
s->next = p;
p = s;
}else {
p->next = s;
s->next = NULL;
}
return p;
}

q = p->next;
if(s->data <= p->data) //如果小于第一个元素则插在开头
{
s->next = p;
p = s;
}else {
while(s->data > q->data && q->next != NULL) //遍历链表,一直到有比s大的节点或链表尾结束
{
p = p->next;
q = p->next;
}
if(s->data >= q->data && q->next == NULL) //判断是什么原因退出while循环
{
s->next = q->next;
q->next = s;
}else {
p->next = s;
s->next = q;
}
p = swap;
}
return p;
}

pnode create(int number) //初始化链表
{
pnode head,s,p,swap;
int i,value;

head = init();
printf("Enter %d number\n",number);

for(i=0;i<number;i++)
{
s = (pnode)malloc(sizeof(node));
scanf("%d",&value); //接收每个元素
if(s == NULL)
{
printf("error\n");
return ;
}
s->data = value;
if(head->next == NULL)
{
head->next = s;
s->next = NULL;
p = s;
}else
{
p = swap_insert(p,s); //排序插入
}
}
head->next = p;
return head;
}

void dispaly(pnode head) //遍历显示
{
pnode p;
if(head->next == NULL)
{
printf("empty\n");
return;
}
p = head->next;
while(p->next != NULL)
{
printf("%3d",p->data);
p = p->next;
}
printf("%3d\n",p->data);
}

pnode insert(pnode head,int value)
{
pnode p,s;

p = head->next;
s = (pnode)malloc(sizeof(node));
if(s == NULL)
{
printf("error\n");
return ;
}
s->data = value;
s->next = NULL;
p = swap_insert(p,s); //排序插入
head->next = p;
return head;
}

int main()
{
pnode head;
int n,value;

printf("enter the number n\n"); //输入初始化元素个数
scanf("%d",&n);
head = create(n); //初始化一个链表
dispaly(head); //显示链表
while(1) {
printf("enter the insert value or 0 for quit!\n"); //输入要插入的元素或者0退出程序
scanf("%d",&value);
if(value == 0)
{
return 0;
}
head = insert(head,value);
dispaly(head);
}

return 0;
}

热心网友 时间:2024-10-14 14:16

#include<stdio.h>
#include<malloc.h>
typedef struct node
{
int a;
struct node* next;

}node;

int main()
{
printf("enter the number of elements\n");
int n;
scanf("%d",&n);
printf("enter the ascending elements \n");
node *head,*p,*q;
if(n==0)
head=NULL;
else
{
head=(node *)malloc(sizeof(node));
scanf("%d",&head->a);
--n;
q=head;
while(n--)
{
p=(node *)malloc(sizeof(node));
q->next=p;
scanf("%d",&p->a);
q=p;
}
q->next=NULL;
}
printf("the list is:\n");
q=head;
while(q!=NULL)
{
printf("%d ",q->a);
q=q->next;
}
printf("\ninsert the elemnt\n");
int m;
scanf("%d",&m);
if(head==NULL)
{
head=(node *)malloc(sizeof(node));
head->a=m;
head->next=NULL;
}
else if(m<(head->a))
{
p=(node *)malloc(sizeof(node));
p->a=m;
p->next=head;
head=p;
}
else
{
q=head;
while(q!=NULL)
{
if(q->next==NULL)
{
p=(node *)malloc(sizeof(node));
p->a=m;
p->next=NULL;
q->next=p;
}
else if(m<(q->next->a))
{
p=(node *)malloc(sizeof(node));
p->a=m;
p->next=q->next;
q->next=p;
break;
}
q=q->next;
}
}
printf("now the list is:\n");
q=head;
while(q!=NULL)
{
printf("%d ",q->a);
q=q->next;
}

return 0;
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
畅享好还是荣耀好 怎么向老师请教问题?? ...和是40.15较大数的小数点向左移动一位就等于较小的数,这两_百度知... 两个数的和是40.15,较大数的小数点向左移动一位就等于较小的数这两... 两个数的和是40.15,较大的数的小数点像向左移动一位就等于较小的数... 两个数的和是40.15,较大数的小数点向左移动一位等于较小的数 ...和是40.15较大数的小数点向左移动一位就等于较小的数这两个数分别... 怎么用手机查询农行信用卡余额? 朝阳公园附近有孩子可以托管的地方吗? 华泰证券怎么添加第二张银行卡 如何理解头插法这段话? ...为什么尾插法要设置最后一个节点为空,而头插法不用??? 头插法建表的问题,,, s-&gt;next=L-&gt;next; L-&gt;next=s; ,,,俩个语句是什么... 什么事独立董事 什么独立董事 关于红楼梦四十四回贾母的话 小孩子暴躁易怒的原因 青春期男孩子脾气暴躁易怒怎么办青春期男孩子脾气暴躁易怒怎么教育 C语言,p-&gt;next指向下一结点,p-&gt;next-&gt;next是不是指向第二个结点?_百度... 出差未能兑现承诺,申请回去答复只能继续留或辞职 ...并以书面形式承诺了若干条件,到岗后未全部兑现,请问如何维权?_百度... 征收土地安置门面地皮迟迟不能到,会有不存在了吗 承诺加薪不兑现,辞职能要赔偿吗 租房合同未到期想退房算违约吗法律依据是什么 做劳动能力鉴定要带什么材料 在抖音中找不到我经常访问的人是怎么回事? 12岁女孩脾气暴躁易大吼大叫孩子爱发脾气大喊大叫家长的处理方法 小孩子发脾气如何引导小孩子发脾气引导的方法 如何快速将派派总船战力升到1亿 派派制造船坞材料怎么得 ...补助村里都不给,我也没地方去要,打过12345也是推来推去 高考选择计算机专业注意事项 请问阿是什么意思? 数据结构,帮忙看那出错了,在做一个查找的函数输入要查找第一个,判断是... 2018cad32位序列号和密钥 s=(Lnode*)malloc(sizeof(LNode)); 链表 数据结构 ...大概有一个4厘米长的口子 没有缝针 现在已经二十天了 伤口已经... 面部外伤,流血较多,表皮大面积破损但未缝针,现在结痂开始脱落,为尽可能... 超挖回填是什么意思? 路基为什么要超挖回填啊?麻烦告诉我 ...去显示是《致命错误:创建3D设备失败,请检查DIRECTX和显卡驱动... 为什么QQ炫舞玩不了.出现创建3D设备失败.请检查DIRECTX和显卡驱动... ...显示: 致命错误 :创建3D设备失败 ,请检查DIRECYX和显卡驱动 是怎么... 我在打开QQ炫舞后,点大区时弹出了“致命错误:创建3D设备失败,请检查DIR... ...会出现《致命错误:创建3D设备失败,请检查DIRECTX和显卡驱动... ...显卡驱动。这是什么意思?需要下什么东西么? QQ炫舞创建3D设备失败,请检查DIRECTX和显卡驱动 超挖回填什么意思? 基坑局部超挖或发生扰动怎么处理 是这样的。。我手机掉了。是189号码的。。应该怎么取消这个卡,不要这...