2022.10.31---单向链表

博客主要围绕信息技术相关实践展开,包括自己实现课上代码功能,对链表进行逆置操作,用冒泡排序实现升序排列,复习之前未掌握内容,递归实现斐波那契数列,还需完成Xmind思维导图。

1.自己实现课上写的代码功能
2.实现链表的逆置
3.冒泡排序完成升序

//main.c
#include "linklist.h"
int main(int argc, const char *argv[])
{
	link *p=link_create();
	link_tailin(p,77);
	link_tailin(p,35);
	link_tailin(p,71);
	link_tailin(p,36);
	link_tailin(p,12);
	link_show(p);
	printf("在位置6插入数据:\n");
	link_inpost(p,6,77);
	link_show(p);
	printf("在位置3插入数据:\n");
	link_inpost(p,3,82);
	link_show(p);
	printf("从头删除数据:\n");
	link_headdel(p);
	link_headdel(p);
	link_show(p);
	printf("删除第3个位置的数据:\n");
	link_delpost(p,3);
	link_show(p);
	printf("连接两个链表:\n");
	link *p1=link_create();
	link_tailin(p1,132);
	link_tailin(p1,351);
	link_tailin(p1,796);
	link_connect(p,p1);
	link_show(p);
	printf("链表逆置后:\n");
	link_turnover(p);
	link_show(p);
	printf("排序后:\n");
	link_sort(p);
	link_show(p);
	return 0;
}
//linklist.h
#ifndef __LINKLIST_H__
#define __LINKLIST_H__
#include <stdio.h>
#include <stdlib.h>

typedef struct linklist
{
	int data;
	struct linklist *next;
}link;

//创建链表
link *link_create();
//插入数据(尾插)
link *link_tailin(link *p,int data);
//输出数据
link *link_show(link *p);
//按位置插入数据
link *link_inpost(link *p,int post,int data);
//删除数据(头删)
link *link_headdel(link *p);
//按位置删除数据
link *link_delpost(link *p,int post);
//连接两个链表
link *link_connect(link *p1,link *p2);
//链表逆置
link *link_turnover(link *p);
//冒泡排序--升
link *link_sort(link *p);

#endif
//linklist.c
#include "linklist.h"

//创建链表
link *link_create()
{
	link *p=(link *)malloc(sizeof(link));
	if(p==NULL)
	{
		printf("申请失败\n");
		return NULL;
	}
	else
	{
		printf("申请成功\n");
	}
	p->data=0;
	p->next=NULL;
	return p;
}
//插入数据(尾插)
link *link_tailin(link *p,int data)
{
	if(p==NULL)
	{
		return NULL;
	}
	link *temp=(link *)malloc(sizeof(link));
	while(p->next!=NULL)
	{
		p=p->next;
	}
	temp->data=data;
	temp->next=p->next;
	p->next=temp;
	return p;
}
//输出数据
link *link_show(link *p)
{
	if(p==NULL)
	{
		return NULL;
	}
	p=p->next;
	while(p!=NULL)
	{
		printf("%-5d",p->data);
		p=p->next;
	}
	puts("");
	return p;
}
//按位置插入数据
link *link_inpost(link *p,int post,int data)
{
	if(p==NULL)
	{
		return NULL;
	}
	int count=0;
	int flag=0;
	link *temp=(link *)malloc(sizeof(link));
	while(p!=NULL)
	{
		if((count+1)==post)
		{
			flag=1;
			temp->data=data;
			temp->next=p->next;
			p->next=temp;
		}
		p=p->next;
		count++;
	}
	if(flag==0)
	{
		printf("位置输入错误\n");
	}
	return p;
}
//删除数据(头删)
link *link_headdel(link *p)
{
	if(p==NULL)
	{
		return NULL;
	}
	link *temp=p->next;
	p->next=temp->next;
	free(temp);
	temp=NULL;
	return p;
}
//按位置删除数据
link *link_delpost(link *p,int post)
{
	if(p==NULL)
	{
		return NULL;
	}
	int count=0;
	int flag=0;
	while(p!=NULL)
	{
		if((count+1)==post)
		{
			flag=1;
			link *temp=p->next;
			p->next=temp->next;
			free(temp);
			temp=NULL;
		}
		p=p->next;
		count++;
	}
	if(flag==0)
	{
		printf("位置输入错误\n");
	}
	return p;
}
//连接两个链表
link *link_connect(link *p1,link *p2)
{
	if(p1==NULL || p2==NULL)
	{
		return NULL;
	}
	while(p1->next!=NULL)
	{
		p1=p1->next;
	}
	p1->next=p2->next;
	return p1;
}
//链表逆置
link *link_turnover(link *p)
{
	int arr[10];
	int i=0;
	link *temp=p;
	while(p!=NULL)
	{
		arr[i]=p->data;
		p=p->next;
		i++;
	}
	while(temp!=NULL)
	{
		temp->data=arr[i];
		temp=temp->next;
		i--;
	}
	return p;
}
//冒泡排序--升
link *link_sort(link *p)
{
	int arr[10];
	int i=0;
	link *temp=p;
	p=p->next;
	while(p!=NULL)
	{
		arr[i]=p->data;
		printf("%-5d",arr[i]);
		p=p->next;
		i++;
	}
	puts("");
	int count=i+1;
	for(i=0;i<count-1;i++)
	{
		for(int j=0;j<count-1-i;j++)
		{
			if(arr[j]>arr[j+1])
			{
				arr[j]=arr[j]^arr[j+1];
				arr[j+1]=arr[j]^arr[j+1];
				arr[j]=arr[j]^arr[j+1];
			}
		}
	}
	i=0;
	while(temp!=NULL)
	{
		temp->data=arr[i];
		temp=temp->next;
		i++;
	}
	return p;
}


4.自己抓紧时间复习,之前不会的内容
5.递归实现斐波那契数列,1,1,2,3,5,8,13,21,34,55,89,144……

#include <stdio.h>
int fibo(int n);
int main(int argc, const char *argv[])
{
	int n=12;
	for(int i=1;i<=n;i++)
	{
		printf("%-5d",fibo(i));
	}
	puts("");
	return 0;
}
int fibo(int n)
{
	if(n==1 || n==2)
	{
		return 1;
	}
	else
	{
		return fibo(n-2)+fibo(n-1);
	}
}


6.完成Xmind思维导图

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值