数据结构day4作业

1.单链表任意位置删除

cs 复制代码
	datetype pos;
	printf("please input pos");
	scanf("%d",&pos);
	head=delete_all(head,pos);
	Output(head);
cs 复制代码
Linklist delete_all(Linklist head,datetype pos)
{
	if(pos<1||pos>length(head)||head==NULL)
		return head;
	if(head->next==NULL)
	{
		free(head);
		head=NULL;
	}
	else
	{
		if(pos==1)
		{
			head=delete_head(head);
			return head;
		}
		else
		{
		Linklist p=head;
		for(int i=1;i<pos-1;i++)
		{
			p=p->next;
		}
		Linklist q=p->next;
		p->next=q->next;

		free(q);
		p=NULL;
		return head;
		}
	}
}

2.单链表任意位置修改

cs 复制代码
	datetype pos;
	printf("please input pos");
	scanf("%d",&pos);
	printf("please input element");
	scanf("%d",&element);
	mod_all(head,pos,element);
	Output(head);
cs 复制代码
void mod_all(Linklist head,datetype pos,datetype element)
{
	Linklist p=head;
	if(head==NULL||pos<1||pos>length(head))
		return;
	for(int i=1;i<pos;i++)
	{
		p=p->next;
	}
	p->date=element;
}

3.单链表任意位置查找

cs 复制代码
	datetype pos;
	printf("please input pos");
	scanf("%d",&pos);
	find_all(head,pos);
	Output(head);
cs 复制代码
void find_all(Linklist head,datetype pos)
{
	Linklist p=head;
	if(head==NULL||pos<1||pos>length(head))
		return;
	for(int i=1;i<pos;i++)
	{
		p=p->next;
	}
	printf("%d\n",p->date);
}

4.单链表任意元素查找

cs 复制代码
	datetype key;
	printf("please input key");
	scanf("%d",&key);
	datetype index=find_ele(head,key);
	if(index==-1)
		printf("不存在\n");
	else{
		printf("在第%d的位置\n",index);
	}
	
cs 复制代码
int find_ele(Linklist head,datetype key)
{
	if(head==NULL)
		return -1;
	datetype count=0;
	Linklist p=head;
	for(int i=1;i<=length(head);i++)
	{
		count++;
		if(p->date==key)
			return count;
		p=p->next;
	}
	return -1;
}

5.单链表任意元素修改

cs 复制代码
	datetype key;
	printf("please input key");
	scanf("%d",&key);
	printf("please input element");
	scanf("%d",&element);
	mod_ele(head,key,element);
	Output(head);
cs 复制代码
int mod_ele(Linklist head,datetype key,datetype element)
{
	if(head==NULL)
		return -1;
	datetype pos=find_ele(head,key);
	Linklist p=head;
	for(int i=1;i<pos;i++){
		p=p->next;
	}
	p->date=element;
}

6.单链表任意元素删除

cs 复制代码
	datetype key;
	printf("please input key");
	scanf("%d",&key);
	delete_ele(head,key);
	Output(head);
cs 复制代码
int delete_ele(Linklist head,datetype key)
{
	if(head==NULL)
		return -1;
	Linklist p=head;
	datetype pos=find_ele(head,key);
	for(int i=1;i<pos-1;i++)
	{
		p=p->next;
	}
	Linklist q=p->next;
	p->next=q->next;
	free(q);
	q=NULL;
	return 0;
}

7.单链表逆置(面试)

cs 复制代码
	head=nizhi(head);
	Output(head);
cs 复制代码
Linklist nizhi(Linklist head)
{
	if(head==NULL)
		return head;
	Linklist p=head->next;
	head->next=NULL;
	while(p)
	{
		Linklist t=p;
		p=p->next;
		t->next=head;
		head=t;
	}
	return head;
}

8.单链表查找倒数第n个节点(面试)

cs 复制代码
	printf("please input n:");
	scanf("%d",&n);
	back_node(head,n);
cs 复制代码
datetype back_node(Linklist head, datetype n)
{
	if(head==NULL||n<1||n>length(head))
		return -1;
	datetype pos=length(head)-n+1;
	find_all(head,pos);
	return 0;

}

9.单链表排序(面试)

cs 复制代码
	datetype flag;
	printf("printf input flag:(0|1)");
	scanf("%d",&flag);
	if(flag==1|flag==0){
		sort_list(head,flag);
		Output(head);
	}
	else{
		printf("input error\n");
	}
cs 复制代码
datetype sort_list(Linklist head,datetype flag)
{
	if(head==NULL)
		return -1;
	Linklist p=head;
	if(flag==1){
	for(int i=0;i<length(head)-1;i++){
		p=head;
		for(int j=0;j<length(head)-i-1;j++){
			if(p->date > p->next->date){
				p->date ^= p->next->date;
				p->next->date ^= p->date;
				p->date ^= p->next->date;
			}
			p=p->next;
		}
	}
	}
	else{
	for(int i=0;i<length(head)-1;i++){
		p=head;
		for(int j=0;j<length(head)-i-1;j++){
			if(p->date < p->next->date){
				p->date ^= p->next->date;
				p->next->date ^= p->date;
				p->date ^= p->next->date;
			}
			p=p->next;
		}
	}
		
	}
	return 0;
}

10.单链表释放内存

cs 复制代码
 	head=free_list(head);
cs 复制代码
Linklist free_list(Linklist head)
{
	if(head==NULL)
		return head;
	Linklist p=head;
	while(head)
	{
		p=head;
		head=head->next;
		free(p);
	}
	p=NULL;
	return head;
}
相关推荐
小小工匠1 小时前
Redis - 事务机制:能实现 ACID 属性吗
数据结构·redis·性能优化·并发·持久化
玖玥拾2 小时前
C/C++ 数据结构(七)栈、容器适配器
c语言·数据结构·c++··容器适配器
Qres8213 小时前
算法复键——树状数组
数据结构·算法
牛油果子哥q6 小时前
并查集(DSU)超精讲,路径压缩、按秩合并、万能模板、连通性判定、最小生成树与刷题实战全解
数据结构·c++·最小生成树·并查集
凌波粒7 小时前
LeetCode--491.递增子序列(回溯算法)
数据结构·算法·leetcode
WL学习笔记8 小时前
单项不带头不循环链表
数据结构·链表
小糯米6018 小时前
JS 数组
数据结构·算法·排序算法
小欣加油8 小时前
leetcode3612 用特殊操作处理字符串I
数据结构·c++·算法·leetcode·职场和发展
凌波粒9 小时前
LeetCode--90.子集II(回溯算法)
数据结构·算法·leetcode
凌波粒9 小时前
LeetCode--46.全排列(回溯算法)
数据结构·算法·leetcode