精华内容
下载资源
问答
  • 单链表插入

    2012-03-29 22:42:50
    单链表代码 实现链表插入 删除 建立 获取数据
  • 单链表插入排序

    2021-01-16 17:07:53
    单链表插入排序(15分) 单链表插入排序 ###目的: 掌握单链表的应用和插入排序的思想。 ###内容: 编写一个函数insertion_sort,对一个无序单链表采用插入排序的方式,将其按递增方式排序,构成有序单链表。系统后台...

    单链表插入排序 (15分)

    单链表插入排序 ###目的: 掌握单链表的应用和插入排序的思想。 ###内容: 编写一个函数insertion_sort,对一个无序单链表采用插入排序的方式,将其按递增方式排序,构成有序单链表。系统后台已经给出函数CreateListRDispList的实现,只需实现函数insertion_sort即可。

    ###单链表结点类型定义:

    typedef int ElemType;    //元素的数据类型
    
    typedef struct LNode {
        ElemType data;        //结点的数据域
        struct LNode *next;    //指向后继结点
    } LinkNode;             //单链表结点类型

    函数接口定义:

    //尾插法建立单链表,细节不表
    void CreateListR(LinkNode *&L, ElemType a[], int n);
    
    //输出线性表,细节不表
    void DispList(LinkNode *L);
    
    //单链表插入排序
    void insertion_sort(LinkNode *&L);

    其中 L是带附加头结点的单链表的头指针。 数组a[] 存放创建无序单链表的元素,n为数组长度,其值不超过3000

    裁判测试程序样例:

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef int ElemType;    //元素的数据类型
    
    typedef struct LNode {
        ElemType data;        //结点的数据域
        struct LNode *next;    //指向后继结点
    } LinkNode;             //单链表结点类型
    
    //尾插法建立单链表,细节不表
    void CreateListR(LinkNode *&L, ElemType a[], int n);
    
    //输出线性表,细节不表
    void DispList(LinkNode *L);
    
    //单链表插入排序:元素递增排序
    void insertion_sort(LinkNode *&L);
    
    int main() 
    {
        int n;
    
        scanf("%d", &n);
        ElemType a[n];
        for (int i = 0; i < n; i++)
            scanf("%d", &a[i]);
    
        LinkNode *A;
        CreateListR(A, a, n);
    
        insertion_sort(A);
        printf("排序后的单链表: ");
        DispList(A);
    
        return 0;
    }
    
    /* 请在下面填写答案 */
    

    输入样例:

    输入有2行。 第1行为单链表的元素个数,接下来的一行为单链表的元素,以空格分隔。

    5
    4 2 5 1 3

    输出样例:

    输出有1行。 首先输出"排序后的单链表: ",之后输出排序后的单链表的元素,元素之间以一个空格分隔,行尾无多余的空格。

    排序后的单链表: 1 2 3 4 5
    void insertion_sort(LinkNode *&L){
    
        if(L!=NULL&&L->next!=NULL){
            LinkNode *pHead = (LinkNode*)malloc(sizeof(L));
            
            pHead->next=L;
            LinkNode *pFirst = L; //指向前面一段链表头节点
            LinkNode *pLast=L; //指向前面一段链表尾节点
            LinkNode *pNode=L->next; //记录当前节点
            LinkNode *pTemp=NULL;  //遍历指针
    
            pLast->next=NULL;
            while(pNode!=NULL)
            {
                LinkNode *pInsert=pHead; //记录指针
                LinkNode *pNext=pNode->next;
                if(pNode->data < pLast->data)
                {
                    pTemp=pFirst;
                    while(pTemp!=NULL && pNode->data>=pTemp->data)
                    {
                        pInsert=pTemp;
                        pTemp=pTemp->next;
                    }
                    pInsert->next=pNode;
                    pNode->next=pTemp;
                    pFirst=pHead->next;
                    pNode=pNext;
                }
                else
                {
                    pLast->next=pNode;
                    pNode->next=NULL;
                    pLast=pNode;
                    pNode=pNext;
                }
            }
            
        } 
        }

     

    展开全文
  • 单链表插入数据

    2020-06-18 19:52:13
    单链表插入数据 #include<stdio.h> ////////////////////////////////////////定义///////////////////////////////////////////////////////////////////////////// typedef struct link//定义一个结构体,...

    单链表插入数据

    #include<stdio.h>
    定义/
    typedef struct link//定义一个结构体,里面只有一个int数据 *next用来存放下一个节点的地址
    {
    
        int data;
        struct link *next;
    
    }LINK;
    //单链表的插入
    /*
    功能:在值为x的节点之后插入值为y的节点,并返回1,不存在x则返回0
    */
    int insert_link(struct link *head,int x,int y)
    {
    
        struct link *new,*q;
        q=head->next;
        while((q!=0)&&(q->data!=x))
            q=q->next;
        if(q==0) 
        {return 0;}
        new=(LINK *)malloc(sizeof(LINK));
        new->data=y;
        new->next=q->next;
        q->next=new;
        return 1;
    
    
    
    }
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    //访问单链表
    
    void print_link(struct link *head)
    {
        struct link *q;
        q=head->next;
        if(!q)
            printf("linklist is null\n");
        else 
        {
            do
            {
                printf("%5d",q->data);
                q=q->next;
            }while(q);
    
    
    
        }
    
    }
    
    
    
    //单链表的建立//
    //头插法
    struct link *creat_link()
    {
        int a;
        struct link *h,*new;
        h=(LINK*)malloc(sizeof(LINK));//搞一个头节点
        scanf("%d",&a);//输入一个int变量a
        while(a!=-1)
        {
            new=(LINK*)malloc(sizeof(LINK));
            new->data=a;//把变量a的数据输入new的data中,类似new.data=data
            new->next=h->next;//把新的数据的下一个地址改成头节点里存放的地址,这样新数据就在整个链表头部了。
            h->next=new;//把新的节点的地址给头节点的存放地址区,这样才能在表头插入下一个数据。
            scanf("%d",&a);//在开始写数据
        }
    
        return h;
    
    
    
    }
    
    void main()
    {
    
    
        struct link *head;//先创立一个头节点
        head=creat_link();
    insert_link(head,3,99);
        print_link(head);
    }

     

    展开全文
  • 单链表插入 链表插入节点 单链表删除节点 链表删除节点 链表输出 链表输...

    单链表插入

    链表插入节点

    单链表删除节点

    链表删除节点

    链表输出

    链表输出

    链表释放内存空间

    链表释放内存空间

    展开全文
  • 单链表插入的实现

    2019-10-17 11:25:50
    单链表插入的实现 导语:在平时开发的项目中经常会用到LinkedList集合来存储数据,而LinkedList是基于链表结构来存储数据的,包括单向链表和双向链表。本片文章将着重详细介绍一下单链表的基本插入操作 链表:首先...

    单链表插入的实现

    导语:在平时开发的项目中经常会用到LinkedList集合来存储数据,而LinkedList是基于链表结构来存储数据的,包括单向链表和双向链表。本片文章将着重详细介绍一下单链表的基本插入操作

    链表:首先先来介绍一下单链表的基本结构,一个单链表的节点(Node)分为两部分,第一个部分保存或者显示结点的信息,另一个部分存储的是下一个结点的地址,每个结点对象维护一个 next 引用,next引用指向下一个节点对象,最后一个结点存储的地址的部分指向的是空值。

    在这里插入图片描述
    1.在链表的头结点前插入新的结点(删除头结点)

    插入代码实现

    //在链表头部添加元素
    public Object addHead(Object obj){
      Node newhead = new Node(obj);
        if(size == 0){
           head = newhead; 
        }else{
           newhead.next = head;
           head = newhead;
        }
          size++;
          return obj;
    }

    插入代码分析

    1.首先对原链表进行判空操作,如果原链表为空,则直接将新的结点赋给头结点

    2.如果原链表不为空,那么将新结点下一个结点指向head

    在这里插入图片描述
    3.将新结点作为头结点
    在这里插入图片描述
    删除代码实现

    //在单链表头部进行删除
    public Object delHead(){
    	Object obj = head.data;
    	head = head.next;	
    	size--;	
    	return obj;	
    }

    删除代码分析

    1.将要删除头结点赋给obj,最后返回

    在这里插入图片描述

    2.将所删头结点的下一个结点作为新的头结点

    在这里插入图片描述
    3.最后链表的size-1,长度减1

    2.在链表的中间结点插入新的结点(删除中间任意一结点)

    插入代码实现

    public Node InsertNode(Node newhead,Node pre){
    //newhead表示要插入的新结点
    //假设在ptr结点和nex结点中间插入
         ......
         newhead.next=pre.next
         pre.next = newhead
         ......
    

    插入代码分析

    1.新结点指向nex结点(即指向pre结点的下一个结点)

    在这里插入图片描述
    2.将pre结点的指针指向新结点
    在这里插入图片描述
    删除代码实现

    public Node DelNode(Node delnode,Node pre){
    //delnode表示要删除的结点
    //删除pre后面的delnode结点
          ......
          pre.next = delnode.next
          ......
    }

    删除代码分析

    1.只需要将删除结点的上一个结点指向删除结点的下一个结点

    在这里插入图片描述

    3.在链表的尾结点后插入新的结点(删除尾部结点)

    插入代码实现

    public Object addTail(Object obj,Node pre){ 
        //表示最后一个结点
         Node newtail = new Node(obj);
         if(size == 0){
           head = newtail; 
         }else{
           newhead.next = newtail;
         }
         size++;
         return obj;
    }
    

    插入代码分析

    1.直接将原链表的尾结点指向新的结点

    在这里插入图片描述

    删除代码实现

    public Node DelNode(Node delnode,Node pre){
    	......
    	//pre:倒数第二个结点
    	pre.next = null;
    	......
    }
    

    删除代码分析

    1.直接将倒数第二个结点指向null

    在这里插入图片描述

    结语:到此单链表的三种插入以及删除就介绍完了,如果不正,还请路过的朋友加以指正…

    展开全文
  • 单链表插入,删除节点 public class 链表插入和删除节点 { public static void main(String[] args) { List<Node> list = new LinkedList<>(); for (int i = 0; i < 10; i++) { Node no...
  • 有趣的数据结构算法4——单链表插入元素、删除元素单链表插入元素单链表删除元素实现代码GITHUB下载连接 关于什么是单链表以及如何进行单链表的生成、遍历等操作大家可以关注我的另一篇博文《有趣的数据结构算法3...
  • 带头结点的单链表插入操作

    千次阅读 2019-05-15 09:30:36
    本题要求实现带头结点的单链表插入操作,插入成功返回1,否则返回0。 函数接口定义: int insert_link ( LinkList L,int i,ElemType e); L是单链表的头指针,i为插入位置,e是插入的数据元素,插入成功返回1,否则...
  • 小甲鱼 P47 单链表3---单链表插入和删除   单链表和数组相比较,最大的优势是插入元素到指定位置的效率。   (单链表插入)让用户输入若干个整数,按顺序插入单链表之中: 比如将3插入2和4之间。对于单链表,...
  • 单链表插入排序(C++) 本题的难点在于,要给链表创建一个不赋值而只是为了方面插入的头节点 #include <iostream> struct ListNode { int m_Value; ListNode* p_Next; }; ListNode* InsertSort(const int*...
  • 老曹的作业本之单链表插入元素单链表插入元素 单链表插入元素 然后插入一个元素有几点关键的问题 1.插入的这个元素在value的哪个位置不重要(listvalue.append(4)),但是要带尾巴,即下标,下标指向原本这个位置...
  • 单链表插入方法总结

    千次阅读 2014-05-21 15:36:17
    单链表插入方法总结:前面两种方法是有序插入链表,第三种方法是按数据顺序插入链表。
  • 实现单链表插入排序

    2011-07-07 16:45:52
    实现单链表插入排序
  • 最近在阅读《C和指针》这本书,里面讲到单链表插入一节,一般我们插入或者删除操作,为了使链表首节点和其余节点操作统一,会创建一个头结点,书中给出了另一种方法,在此记录一下: 首先,普遍的方法: #include ...
  • 本题要求实现带头结点的单链表插入操作,插入成功返回1,否则返回0。 函数接口定义: int insert_link ( LinkList L,int i,ElemType e); L是单链表的头指针,i为插入位置,e是插入的数据元素,插入成功返回1,否则...
  • 单链表插入删除.c

    2019-09-27 17:34:28
    实现单链表的建立、结点的插入、删除操作,上机调试程序直到算法运行正确
  • 6-6 带头结点的单链表插入操作 (5 分) 本题要求实现带头结点的单链表插入操作,插入成功返回1,否则返回0。 函数接口定义: int insert_link ( LinkList L,int i,ElemType e); L是单链表的头指针,i为插入位置,e是...
  • [数据结构]顺序单链表插入

    千次阅读 2014-11-07 17:12:16
    一,单链表插入操作
  • 数据算法C语言实现——单链表插入续 雨中漫步 问题:构造两个带有表头结点的有序单链表La、Lb,编写程序实现将La、Lb合并成一个有序单链表Lc。 合并思想是:程序需要3个指针:pa、pb、pc,其中pa,pb分别指向La表与...
  • 单链表插入educoder

    2020-06-03 15:06:28
    /*使用尾插法建立单链表,并返回指向单链表的头结点的指针*/ Node *CreateAtTail(DataType a[],int n) { int i; Node *first,*s,*r; first=InitList(); //初始化单链表 r=first; for(i=0;i<n;i++) { s=...
  • 顺序单链表插入新节点的一种方法

    千次阅读 2016-08-03 00:42:05
    顺序单链表插入新节点的一种好的抽象方法
  • 单链表插入,遍历 单链表的插入简单来说就是找到位置,然后将元素插入。 如何找? 循环遍历找位置,因为链表的每个节点在内存中的存储位置是非连续的,所以不能像数组那样通过下标位移找到每个元素,而是需要借助...
  • C语言单链表插入

    千次阅读 2020-07-04 17:30:28
    向有序链表中插入节点: /************************************ ** 1、找到应该插入新节点的位置 ** ** 2、为新节点分配内存(创建新节点)** ** 3、把链表连起来 ** ***************************
  • 单链表插入和删除

    2014-03-27 22:55:36
    单链表的实现的插入和删除,可以上机执行的!适合初学者!
  • //单链表插入思想:始终保存一个指向链表当前节点之前的那个节点的指针。` typedef struct NODE {  struct NODE *link;  int value; }Node; //插入到一个有序的单链表。函数的参数是一

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,341
精华内容 4,136
关键字:

单链表插入