复试准备

很久没有敲代码啦,因为今年疫情的原因,想想差不多一个月没有敲代码了,真是罪过,因为一直不知道北京会以什么样子的形式来进行复试,弄毕设弄的也狗屁不是的,我真他娘的讨厌小组合作,算了说多了也都是泪,代码还是得每天继续敲下去,管他呢,不多管闲事啦,毕设组长也不是我,我不要瞎操心啦,随便吧大家,还是自己的事情比较重要,明天我要早起敲代码,哼,加快脚步,初步打算之前的基础知识再来一遍然后再从王道和LeetCode牛客网上刷点题。今天群里说一个大佬一月份到现在没有停过,我是2月份到现在停了一个月,而且那个人也是计算机技术的,生活就是这样你不努力总会有人把你超越`。下面是一些基础的链表题目

//这是目前所想到的一些链表的题目,从今天开始一刻我也不会浪费了


#include<stdio.h>
#include<stdlib.h>
typedef int Elemtype;
typedef struct Lnode{
	Elemtype data;
	struct Lnode*next;
}Lnode,*LinkList;
//以上是结构体的基本定义



LinkList Creat(LinkList &L)
{
	Elemtype e;
	L=(Lnode*)malloc(sizeof(Lnode));
	L->next=NULL;//不要忘记重要
	scanf("%d",&e);
	while(e!=9999)
	{
		LinkList s=(Lnode*)malloc(sizeof(Lnode));
		s->data=e;
		s->next=L->next;
		L->next=s;
		scanf("%d",&e);
	}
	return L;
}
//以上是头插法建立链表,头插法建立链表一定注意L->next=NULL头结点的初始化!
LinkList tail_insert(LinkList &L)
{
	Elemtype e;
	scanf("%d",&e);
	LinkList r,s;
	L=(LinkList)malloc(sizeof(Lnode));
	L->next=NULL;//尾插法可以没有这句
	r=L;
	while(e!=9999)
	{
		s=(Lnode*)malloc(sizeof(Lnode));
		s->data=e;
		r->next=s;
		r=s;
		scanf("%d",&e);
		}
		r->next=NULL;//不要忘记!!
	return L;
	}
//尾插法就是最后一定不要忘记将r->next=NULL
void print(LinkList L)
{
		LinkList q;
		q=L->next;
		while(q!=NULL)
		{
			printf("%2d",q->data);
			q=q->next;
		}
		printf("\n");
}
//输出链表一定先将L->next给令一个函数
LinkList number_find(LinkList L,int i)
 {
	 LinkList q;
	 q=L->next;
	 int k=1;
	 if(i<=0)
	 {
		 printf("输入元素位置有误");
		 return NULL;
	 }
	 while(q!=NULL&&k<i)
	 {
		 q=q->next;
		 k++;
	 }
	 return q;
	 }
//按照位置查找元素,所有跟位置有关的函数都要调用他
LinkList elem_find(LinkList L,Elemtype e)
{
	LinkList q=L->next;
	
	while(q!=NULL&&q->data!=e)
	{
		q=q->next;
	}
	   return p;
}
//按照元素来查找
bool Delte(LinkList &L,int i)
{   int k=1;
	if(i==0)
	{
		return false}
	LinkList q=L->next;
	while(q!=NULL&&k<i-1)
	{
		q=q->next;
		k++;
	}
	printf("%d",i);
	LinkList r;
	r=q->next;
	q->next=r->next;
	free(r);
	return true;
	}
//按照位置来进行删除元素
LinkList Delte_min(LinkList &L)
{
	LinkList min,p;
	p=L->next;
	min=p;
	while(p!=NULL)
	{
        if(p->data<min->data)
		{
			min=p;
		}
		p=p->next;
	}
	printf("%d",min->data);
	return L;
	}
	//查找链表中最小元素
LinkList Reverse(LinkList &L)

{   LinkList s,r;
	LinkList q=L->next;
	L->next=NULL;
	s=q->next;
	r=NULL;
	while(s!=NULL)
	{ 
		q->next=r;
		r=q;
		q=s;
		s=s->next;	
	}
	q->next=r;
	L->next=q;
	return L;
}
//链表的逆置,脑子中一定要有逆置的图
//在某个位置插入某个元素
LinkList insert(LinkList &L,int i,Elemtype e)
{   LinkList s=number_find(L,i-1);
	LinkList q=(Lnode*)malloc(sizeof(Lnode));
	q->data=e;
	q->next=s->next;
	s->next=q;
	return L;
}
//删除某两个元素之间的元素
LinkList Delete_2(LinkList &L)
{   
   LinkList pre=L;
   LinkList q=pre->next;
   LinkList s;
    Elemtype m,n;
	printf("请输入想要删除数字范围,用,进行分割");
	scanf("%d,%d",&m,&n);
	if(m>n)
	{
		printf("输入的范围有误,请重新输入");
        scanf("%d,%d",&m,&n);
	}
	else{
		while(q!=NULL)
		{
			if(q->data>=m&&q->data<=n)
			{
				s=q;
				q=q->next;
				pre->next=q;
				free(s);
				}
				else{
					pre=q;
					q=q->next;
				}
			}
		}
	return L;
	}
//按照元素的值来删除元素
LinkList Delete_3(LinkList &L,Elemtype e)
{   LinkList pre=L;
	LinkList q=pre->next;
	if(q==NULL)
	{
		return q;
	}
	while(q!=NULL)
	{
		if(q->data!=e)
		{
			pre=q;
			q=q->next;
		}else{	
			LinkList s=q;
	        q=q->next;
	       pre->next=q;
	       free(s);
		}

	}

	return L;
	}
	
int main(){
	LinkList L;
	Elemtype n,e;
	LinkList s;
	bool flag;
    printf("请开始输入元素,并且以9999作为结束标志");
    //Creat(L);
	tail_insert(L);
	print(L);
    Reverse(L);
	print(L);
	insert(L,3,9);
	print(L);
	Delete_2(L);
	print(L);
	Delete_3(L,2);
	print(L);

	flag=Delte(L,4);
	if(flag)
	{
		printf("删除元素成功");
	}else{
		printf("删除元素失败");
	}
	print(L);
	Delte_min(L);
    printf("请输入要查找第几个位置");
	scanf("%d",&n);
	s=number_find(L,n);
	if(s!=NULL)
	{
		printf("查找成功!%3d",s->data);
	    printf("\n");
	}else
	{
		printf("查找失败");
	}
	printf("请输入你想要找的元素");
	scanf("%d",&e);
	s=elem_find(L,e);
	if(s)
	{
		printf("查找元素成功\n");
	}else{
		printf("查找元素失败\n");
	}
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值