您的位置:首页 > 其它

已知线性表中的元素以值递增顺序排列,并以双向链表为存储结构。试实现以下功能:删除表中所有[MinNum, MaxNum]范围内的数据。

2019-05-15 21:38 375 查看
版权声明:版权归作者所有 https://blog.csdn.net/mo_chen1025/article/details/90245706

已知线性表中的元素以值递增顺序排列,并以双向链表为存储结构。试实现以下功能:删除表中所有[MinNum, MaxNum]范围内的数据。

编程要求:
输入:
键盘输入链表的数据元素(至少 5 个)
键盘输入 MinNum, MaxNum 值
输出:
屏幕打印链表操作的结果。

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

typedef int ElemType;
typedef struct DuLNode{
struct DuLNode *prior;
ElemType data;
struct DuLNode *next;
}DuLNode, *DuLList;

void CreateList(DuLList &L,int n)//建立有n个元素的双向链表L
{
DuLList p,s;
ElemType i;
L=(DuLList)malloc(sizeof(DuLNode));
L->prior=NULL;
L->next=NULL;
p=L;
for(i=0;i<n;i++)
{
s=(DuLList)malloc(sizeof(DuLNode));
printf("Please input the %d element:",i+1);
scanf("%d",&s->data);
p->next=s;
s->prior=p;
p=p->next;
}
p->next=NULL;
}

void ListDelete(DuLList &L,int i,ElemType &e)//删除第i个位置的元素并把值赋给e
{
DuLList p,s;
int j;
p=L;
for(j=0;p&&j<i-1;j++)
p=p->next;
if(!p||j>i-1) {printf("ERROR!\n"); return;}
s=p->next;
e=s->data;
p->next=s->next;
if(p->next)
p->next->prior=p;
free(s);
}

void Function(DuLList &L,int n,int min,int max)
{
DuLList p,s;
int i;
ElemType tem;
p=L;
for(i=0;p&&i<n;)
{
s=p->next;
if(s->data>=min&&s->data<=max)
{
ListDelete(L,i+1,tem);
n--;
continue;
}
p=p->next;
i++;
}
}

void ListPrint(DuLList L)
{
DuLList p;
int i;
p=L->next;
if(!p) {printf("ERROR!\n"); return;}
for(i=0;p;i++)
{
printf("No.%d\t%d\n",i+1,p->data);
p=p->next;
}
}

void main()
{
DuLList List;
int n;
ElemType Min,Max;
printf("Please input the number of element:");
scanf("%d",&n);
CreateList(List,n);
printf("Please input the Minimum number:");
scanf("%d",&Min);
printf("Please input the Maximum number:");
scanf("%d",&Max);
Function(List,n,Min,Max);
ListPrint(List);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐