• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

wchenfeng

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

已知线性表中的元素以值递增有序排列,并以单链表作存储结构。试写一算法,删除表中所有大于mink且小于mark的所有元素(若表中存在这样的元素),同时释放被删除结点空间。

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

typedef struct node
{
	int data;//数据
	int length;//长度
	struct node  *next;
}Node,*LinkList;
//删除超过范围的内容
void deLinkList(LinkList L,int mink,int maxk)
{
	LinkList p,q;p=L;
	while(p!=NULL)
	{
		if(p->data>mink&&p->data<maxk)
		{
		printf("找到错误目标\n");
		q=p->next;
		p->data=q->data;
		p->next=q->next;
		free(q);
		}
		else p=p->next;
	}
}
//得到要输入的数据数量
int getnumber()
{
	int n;
	printf("请输入你要录入的数据数量:");
	scanf("%d",&n);
	return n;
}

/*建立链表
后插入法创造链表
算法时间复杂度为O(n)
*/
LinkList init(int n)
{
	int i;
	LinkList L;
	Node *r;
	Node *p;
	L=(LinkList)malloc(sizeof(Node));//建立一个带头指针的空链表
	L->next=NULL;
	r=L;//尾指针r指向头结点
	for(i=1;i<=n;i++)
	{
		p=(Node *)malloc(sizeof(Node));//生成新结点
		printf("输入第%d位的数据:",i);//输入元素值赋给新结点*p的数据域
     	scanf("%d",&p->data);
		p->next=NULL;//将新结点*p插入尾结点*r之后
		r->next=p;//r指向新的尾结点*p
		r=p;
	}
	L->length=n;
	return L;
}
//展示信息
//算法的时间复杂度未O(n),n为单链表中的数据节点的个数
void show(LinkList L)
{
	int i=0;
	Node *p;
	p=L->next;
	while(p)
	{
		i++;
		printf("第%d位的数据:%d\n",i,p->data);
		p=p->next;
		

	}
	printf("\n信息已全部输出\n");

}
//主函数
int main()
{
	int n,mink,maxk;
	LinkList L;
	n=getnumber();
	L=init(n);
	show(L);
	//删除mink~maxk之间的元素
	printf("请输入mink、maxk的值\n");
	scanf("%d%d",&mink,&maxk);
	deLinkList(L,mink,maxk);
	show(L);
	free(L);
}

输出

 输入

6
0
1
2
3
4
5

posted on 2022-04-12 20:02  王陈锋  阅读(581)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3