已知线性表中的元素以值递增有序排列,并以单链表作为存储结构。现在删除表中所有值大于mink且小于maxk的元素,并释放。

已知线性表中的元素以值递增有序排列,并以单链表作为存储结构。
现在删除表中所有值大于mink且小于maxk的元素,并释放。 

/*
已知线性表中的元素以值递增有序排列,并以单链表作为存储结构。
现在删除表中所有值大于mink且小于maxk的元素,并释放。 
*/

#include <stdio.h>
#include "malloc.h"

typedef struct LNode{
	int data;
	struct LNode *next;
}LNode,*LinkList;//线性链表类型

//打印 单链表 元素 
void prin_Link(LinkList a);
//释放链表 
void free_link(LinkList a);
//构造一个单链表 
LNode * create_list();//返回头结点地址 
//删除范围外的结点,等于算在范围内  
void del_element(LinkList a,int mink,int maxk)
{
	LinkList p,q,pre = a;//pre 初始指向 头结点
	p = pre->next; 
	while(p != NULL)
	{
		if(p->data < mink || p->data > maxk)//找到在范围外 
		{
			//找到结点 开始删除
			pre->next = p->next;//剔除 要删除的 p指向的结点 
			//释放 p指向的结点 并恢复p指针 
			free(p);
			p = pre->next;//p始终保持前一个 结点有pre指针 
		}
		else//没有找到 继续向后遍历 
		{
			pre = p;
			p = p->next;
		} 
		
	}
	
	return;
} 
int main()//main* 
{
	LNode * a;//指向首结点的 指针 
	
	//构造单链表,并添加数据 
	a = create_list();//a接收 首结点 
	
	//查看构造结果
	prin_Link(a); 
	
	//删除 在mink < k < maxk 之外的元素 
	int mink = 0,maxk = 0;
	scanf("%d%d",&mink,&maxk);
	//开始删除
	del_element(a,mink,maxk);//参:表首地址,下线,上线 
	
	//查看删除后效果
	prin_Link(a); 
	
	//程序结束,释放链表 
	free_link(a);
	
	return 0;
}

//构造一个单链表 
LNode * create_list()
{
	LinkList a;
	LinkList q,p;
	int size = sizeof(LNode);//获取结点空间 
	a = (LinkList)malloc(size);//当作头结点 不保存数据,可以使删除算法统一 
	a->next = NULL;
	a->data = 0;
	 
	
	q = (LinkList)malloc(size);//当作头结点 不保存数据
	q->next = NULL;
	q->data = 3;
	a->next = q;//q这里作为第一个 有数据结点

	for(int i = 4;i < 13;i ++)
	{
		//初始一个结点 
		p = (LinkList)malloc(size);
		p->next = NULL;
		p->data = i;
		
		q->next= p;//q下一个结点指向新创建的p结点 
		q = p;   //q 移到p的位置 
		p = p->next;//p指向NULL 
	}
	return a;//返回 首结点 
} 

//打印 单链表 元素 
void prin_Link(LinkList a)
{
	LinkList p = a->next;
	
	while(p != NULL)
	{
		printf("%d ",p->data);
		p = p->next;
	}
	printf("\n");
	return;
}
//释放链表 
void free_link(LinkList a)
{
	LinkList p = a->next;
	while(p != NULL)
	{
		//从头结点后一个位置,开始释放 
		a->next = p->next;
		free(p);
		p = a->next;
	}
	
	//最后释放 头结点
	free(a); 
	a =NULL;//初始指针 
	return;
}

猜你喜欢

转载自blog.csdn.net/qq_47991812/article/details/121569738
今日推荐