已知单链表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");
}
 

  • 5
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值