已知单链表L是一个递减有序表,写一算法,实现将任意x插入其中后仍保持L的有序性。

阅读: 评论:0

已知单链表L是一个递减有序表,写一算法,实现将任意x插入其中后仍保持L的有序性。

已知单链表L是一个递减有序表,写一算法,实现将任意x插入其中后仍保持L的有序性。

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

typedef struct LNode     //单链表数据结构 
{
    int data ;
    struct LNode *next;
}LNode,*LinkList;

//int N=0;   //表长记数,全局变量 

LinkList createlist();   // 创建链表算法 
int charu(LinkList L);   //插入算法 
int printout(LinkList L);  //显示链表内容算法 

int main()
{
    int a;
    LinkList L;
    L=createlist();  //建表
    printf("原表数据:n");
    printout(L);
    charu(L);         //插入 
    printout(L);    //输出插入后的结果 
    return 0; 
}

LinkList createlist()    //尾插入法初始化按值递减链表 
{
    int a,j;
    LNode *s; 
    LinkList L=(LinkList)malloc(sizeof(LNode));        //带头节点的空链表
    s=L; 
    for(j=20;j>=-10;j=j-2)
    {
        s->next=(LinkList)malloc(sizeof(LNode));    //生成新节点
        s=s->next;
        s->data=j;
//        N++; 
    }
    s->next=NULL;
    return L;
}
int charu(LinkList L)
{
    int a;
    printf("输入要插入的数:");
    scanf("%d",&a);
    LinkList p,s,q;  //p是插入位置定位指针,q是p的前一个结点指针 
    p=L->next; q=L;  //p指向开始结点,q指向头结点 
    while(p&&p->data>a)   //从前向后遍历递减序列,在第一个小于a的位置上插入 
    {
        p=p->next; q=q->next;  //大于a时,则移动p和q指针,q是p的前驱结点 
    }
    if(q->next==p) 
    {
        s=(LinkList)malloc(sizeof(LNode));  //创建新结点s,保存a
        s->data=a;    
        s->next=p; q->next=s;     //插入到q之后,p之前 
    }
    else printf("数据插入出错n");

}
int printout(LinkList L)
{
    LNode *m=L->next;  //m是定位指针 
    while(m!=NULL)
    {
        printf("%4d",m->data);
        m=m->next;
    }
    printf("n");
}
 

本文发布于:2024-01-28 11:38:09,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/17064130957142.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:ORA
下一篇:Java中的OOM
标签:有序性   是一个   算法   后仍   链表
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23