编程c语言-顺序链表的插入用C语言编程实现

问题描述

顺序链表的插入用C语言编程实现

题目是:向递增的顺序链表中插入一个数,将插入后的链表输出。下面是源程序,但只能输入,但一输出就崩溃是咋回事啊?哪位大神求解,,,感激不尽。。。
#include
#include

typedef struct Lnode
{
int data;
struct Lnode *next;
}Lnode,*LinkList;

LinkList CreateListR(LinkList L)
{
int n;
LinkList p,s;
p=L=(LinkList)malloc(sizeof(Lnode));
L->next=NULL;
scanf("%d",&n);
for(;n>0;n--)
{
s=(LinkList)malloc(sizeof(Lnode));
scanf("%d",&s->data);
p->next=s;
p=s;
}
p->next=NULL;
return L;
}

LinkList ListInsert(LinkList L)
{
int m;
LinkList s,p=L;
scanf("%d",&m);
while(p!=NULL)
{
if(p->data>m)
{
s=(LinkList)malloc(sizeof(Lnode));
s->data=m;
s->next=L->next;
L->next=s;
break;
}
else if(p->next->data>m)
{
s=(LinkList)malloc(sizeof(Lnode));
s->data=m;
s->next=p->next;
p->next=s;
break;
}
p=p->next;
}
return L;
}

int main()
{
LinkList q=NULL,L=NULL;
L=CreateListR(L);
q=ListInsert(L);
q=q->next;
while(q)
{
printf("%d ",q->data);
q=q->next;
}
return 0;
}

解决方案

 LinkList ListInsert(LinkList L)
{
      int m;
      LinkList s,p=L;
      scanf("%d",&m);
      while(p->next!=NULL) //改
      {
            if(p->data>m)
            {
                  s=(LinkList)malloc(sizeof(Lnode));
                  s->data=m;
                  s->next=L->next;
                  L->next=s;
                  break;
            }
            else if(p->next->data>m)
            {
                  s=(LinkList)malloc(sizeof(Lnode));
                  s->data=m;
                  s->next=p->next;
                  p->next=s;
                  break;
            }
            p=p->next;
      }
      return L;
}

解决方案二:

谢谢~
可是结果还是不对啊。。。

时间: 2025-01-19 02:34:22

编程c语言-顺序链表的插入用C语言编程实现的相关文章

c语言问题-顺序链表的插入用C语言编程实现

问题描述 顺序链表的插入用C语言编程实现 将一个整数插入到有序的顺序链表中,以下是我的源程序,请问哪错了啊?? #include #include typedef struct Lnode { int data; struct Lnode *next; }Lnode,*LinkList; LinkList CreateListR(LinkList L) { int n; LinkList p,s; p=L=(LinkList)malloc(sizeof(Lnode)); scanf("%d&qu

指针-C语言单链表的插入求解了

问题描述 C语言单链表的插入求解了 对于带有头结点的链表,为什么在插入方法需要传入头指针的地址(二重指针)?对于不带头结点的链表,插入或者删除第一个元素时,需要使用头指针的地址,可是对于带头结点链表,为何要呢? 解决方案 解决方案二: C语言不像C++,没有引用参数,所以参数的形参被改变不能作用到实参上. 比如 void foo(int i) { i = 2; } int i = 1; foo(i); // i还是1 为此,需要指针: void foo(int* i) { *i = 2; } i

C语言单链表常见操作汇总_C 语言

C语言的单链表是常用的数据结构之一,本文总结了单链表的常见操作,实例如下: #include<stdio.h> #include<stdlib.h> //定义单链表结构体 typedef int ElemType; typedef struct Node { ElemType data; struct Node *next; }LNode,*LinkList; //创建单链表 void Build(LinkList L) { int n; LinkList p,q; p=L; pr

C语言顺序表实现代码排错_C 语言

今天本来想写段代码练练手,想法挺好结果,栽了个大跟头,在这个错误上徘徊了4个小时才解决,现在分享出来,给大家提个醒,先贴上代码: 复制代码 代码如下: /******************************************** * 文件名称:sqlist.h * 文件描述:线性表顺序存储演示 * 文件作者:by Wang.J,in 2013.11.16 * 文件版本:1.0 * 修改记录:*********************************************/

关于c语言实现动态顺序表的插入删除

问题描述 关于c语言实现动态顺序表的插入删除 3C #include ""stdafx.h""#includeconst int MAXSIZE = 10;typedef struct{ int *elem; int length; int maxsize;}sqlist;void initList(sqlist *L){ L->elem = (int *)malloc(L->maxsize*sizeof(int)); if (!L->elem)

C语言之单链表的插入、删除与查找_C 语言

单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素.要实现对单链表中节点的插入.删除与查找的功能,就要先进行的单链表的初始化.创建和遍历,进而实现各功能,以下是对单链表节点的插入.删除.查找功能的具体实现: #include<stdio.h> #include<stdlib.h> #include<string.h> typedef int ElemType; /** *链表通用类型 *ElemType 代表自定义的数据类型 *struct

C语言单向链表的表示与实现实例详解_C 语言

1.概述: C语言中的单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始. 链表中最简单的一种是单向链表,它包含两个域,一个信息域和一个指针域.这个链接指向列表中的下一个节点,而最后一个节点则指向一个空值. 如下图所示: 一个单向链表包含两个值: 当前节点的值和一个指向下一个节点的链接 一个单向链表的节点被分成两个部分.第一个部分保存或者显示关于节点的信息,第二个部分存储下一个节点的地址.单向链表只可向一个方向遍历. 链表最基本的结构是在每个节点

C语言单链表的实现_C 语言

单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素. 链表结构: SList.h #pragma once typedef int DataType; typedef struct SListNode { DataType data; struct SListNode* next; }SListNode; // 如果要修改链表就必须加引用 SListNode* _BuyNode(DataType x); //建立节点 void PrintSlist(SListNode

利用C语言实现顺序表的实例操作_C 语言

本文实例讲述了C语言实现顺序表(线性表)的方法.分享给大家供大家参考,具体如下: 一:顺序表代码实现 #ifndef _SEQ_LIST_H #define _SEQ_LIST_H #include <stdio.h> #include <stdlib.h> #include <assert.h> #include <string.h> #define ElemType float //以float类型测试算法通用性,而不是以惯用的int #define I