设计一个算法,对一个有序的单链表,打印出所有值大于x 而不大于y的元素

#include <stdio.h>
#include <stdlib.h>
#define flag -1 //定义数据输入结束的标志数据

//设计一个算法,对一个有序的单链表,打印出所有值大于x 而不大于y的元素 
typedef int DataType;

typedef struct node
{
    DataType data;  //数据域
    struct node *next;  //指针域
}node,*LinkList;

//定义一个添加元素的函数AddElem()
//尾插法 
void AddElem(LinkList L)
{
    DataType x;
    LinkList p;    //指向当前元素x的指针
    //p = NULL;
    p = L->next;    //使p指向L的第一个节点

    printf("请输入输入元素x的值(输入-1则结束):\n");
    scanf("%d",&x);
    while(x!=flag)
    {
        //必须在循环里里面开辟内存!
        p = (LinkList)malloc(sizeof(node));
        p->data = x;
        p->next = L->next;
        L->next = p;
        scanf("%d",&x);
    }
}

/*
a1    a2
    p

*/
//定义一个显示链表当前元素的函数ShowElem()
void ShowElem(LinkList L)
{
    LinkList s;
    s = (LinkList)malloc(sizeof(node));
    //s = NULL;		//没必要为NULL 
    s = L->next;
    while(s)    //等价于s!=NULL
    {
        printf("%d\t",s->data);
        s = s->next;    //将指针往后移
    }

}

//定义一个排序的函数SortedList()
//void SortedList(LinkList L)
//{
//
//}

//删除所有值大于x 而不大于y的节点
void DelElem(LinkList L)
{
    LinkList s;
    s = (LinkList)malloc(sizeof(node));
    s = L->next;    //指向链表L的第一个节点
    DataType x,y;
    printf("\n输入区间的左侧(整数):",&x);
    scanf("%d",&x);
    printf("\n输入区间的右侧(整数):",&y);
    scanf("%d",&y);
    if (x<=y)
    {
        while(s)    //满足下一个有元素时,循环
        {
            if((s->data)>x && (s->data)<=y)
            {
                //不执行任何操作 
            }
            else
                printf("%d\t",s->data);
            s = s->next;    //往后移动
        }
    }
    else
        printf("区间输入有误!");
    exit(1);    //错误退出!
    printf("\n删除某一区间的元素后,链表中的元素为:\n");

}


int main()
{
    LinkList L;
    L = (LinkList)malloc(sizeof(node));

    L->next = NULL;
    //L = NULL; //错的
    AddElem(L);
    printf("\n添加元素成功!\n");
    printf("此时,链表中的元素为:\n");
    ShowElem(L);
    printf("\n删除某一区间的元素:\n");
    DelElem(L);
    ShowElem(L);
    printf("\n");
    return 0;
    
}

运行结果如下:

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值