#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;
}
运行结果如下: