首页 > 其他分享 >C语言-链表流星雨(EsayX)

C语言-链表流星雨(EsayX)

时间:2023-02-03 17:24:25浏览次数:35  
标签:LinkList void list C语言 链表 next EsayX data curNode

刷B站看到的,做个玩玩。IDE:Visual Studio 2022。依赖EsayX图形库

1-效果

 

2-程序

/*
链表流星雨单文件版本
依赖EsayX图形库
*/
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <graphics.h>

typedef struct Rain
{
	int x;
	int y;
	char str[20];
}ElemType;
//定义节点
typedef struct LNode
{
	struct LNode* next;
	ElemType data;
}Node, * LinkList;

//链表函数
LinkList createList();
void push_back(LinkList list, ElemType val);
void pop_back(LinkList list);
void showAll(LinkList list);
bool empty(LinkList);
//数字雨函数

//初始化数字雨
void initRain(LinkList list, int size)
{
	for (int i = 0; i < size; i++)
	{
		struct Rain newRain;
		newRain.x = i * 15;
		newRain.y = rand() % getheight();
		for (int i = 0; i < 19; i++)
		{
			newRain.str[i] = rand() % 26 + 'A';
		}

		push_back(list, newRain);
	}

}
//绘制数字雨
void drawRain(LinkList list)
{
	LinkList curNode = list->next;
	while (curNode)
	{
		for (int i = 0; i < 19; i++)
		{
			settextcolor(RGB(0, 255 - i * 13, 0));
			outtextxy(curNode->data.x, curNode->data.y - i * 15, curNode->data.str[i]);
		}
		curNode = curNode->next;
	}
}
//移动一根数字雨
void moveRain(LinkList node)
{
	node->data.y++;
	if (node->data.y > getheight())
	{
		node->data.y = 0;
	}
}
typedef void(*FUN)(LinkList node);//函数指针
//移动所有数字雨
void moveAllRain(LinkList list, FUN fun)
{
	LinkList curNode = list;
	while (curNode)
	{
		fun(curNode);
		curNode = curNode->next;
	}
}

int main()
{
	//创建一个图形窗口
	initgraph(960, 640);
	//初始化一个链表
	LinkList list = createList();
	//初始化数字雨,70根
	initRain(list, 70);

	BeginBatchDraw();
	while (true)
	{
		cleardevice();
		//绘制数字雨
		drawRain(list);
		//移动所有数字雨
		moveAllRain(list, moveRain);
		FlushBatchDraw();
	}
	EndBatchDraw();
}


//创建带头节点的链表
LinkList createList()
{
	LinkList headNode = (LinkList)calloc(1, sizeof(Node));
	if (!headNode)
		return NULL;
	return headNode;
}
//往链表中插入元素
void push_back(LinkList list, ElemType val)
{
	LinkList newNode = (LinkList)calloc(1, sizeof(Node));
	if (!newNode)
		return;
	newNode->data = val;

	LinkList curNode = list;
	while (curNode->next != NULL)
	{
		curNode = curNode->next;
	}
	curNode->next = newNode;

}
//删除尾部元素
void pop_back(LinkList list)
{
	if (empty(list))
		return;
	LinkList curNode = list;
	while (curNode->next->next != NULL)
	{
		curNode = curNode->next;
	}
	free(curNode->next);
	curNode->next = NULL;
}
//遍历所有元素
void showAll(LinkList list)
{
	LinkList curNode = list->next;
	while (curNode)
	{
		//printf("%d ", curNode->data);
		curNode = curNode->next;
	}
	//printf("\n");
}
//判断链表是否为空
bool empty(LinkList list)
{
	return list->next == NULL;
}

 

标签:LinkList,void,list,C语言,链表,next,EsayX,data,curNode
From: https://www.cnblogs.com/FishSmallWorld/p/17089938.html

相关文章

  • LeetCode刷题,代码随想录算法训练营Day3| 链表理论基础 203.移除链表元素 707.设计链
    链表理论基础链表是通过指针串联在一起的线性结构,每个节点由一个数据域和一个指针域构成。链表的类型单链表双链表有两个指针域,一个指向下一个节点,一个指向上一个节......
  • C语言小项目-通讯录的实现
    contact.h#defineMAX1000#defineMAX_NAME20#defineMAX_SEX5#defineMAX_TELE12#defineMAX_ADDR30enumopt{EXIT,ADD,DEL,SEARCH,MODIFY,SHOW,SORT};......
  • 枚举以及联合体--C语言版
    枚举的定义枚举顾名思义就是一一列举。把可能的取值一一列举。一周的星期一到星期日是有限的7天,可以一一列举。性别有:男、女、保密,也可以一一列举。月份有12个月,也可以......
  • UVA 12657 Boxes in a Line (双向链表)
    题意:给定N个盒子,分别标号为1~N;有下面4种操作:“1 X Y” 表示将X移到Y的左边;“2 X Y” 表示将Y移到Y的右边;“3 X Y” 表示交换X与Y的位置;“4”  表示将1~N所有的......
  • C语言extern和static
    下面的代码段说明了变量和形式参数声明中怨念或者省略存储类型的所有可能的方法。inta;externintb;staticintc;voidf(intd,registerinte){autointg......
  • C语言学习: 快速排序(递归方式)
    1#include<stdio.h>2#include"io_utils.h"3#include<stdlib.h>4#include<time.h>56#definePLAYER_COUNT5078voidSwapElements(intarray[......
  • C语言学习: 数组打乱
    1#include<stdio.h>2#include"io_utils.h"3#include<stdlib.h>4#include<time.h>56#definePLAYER_COUNT5078voidSwapElement(intarray[]......
  • 数据结构-单向链表练习
    publicclassSingLinkedList2{publicstaticvoidmain(String[]args){HeroNode2h1=newHeroNode2(1,"宋江","及时雨");HeroNode2h2=......
  • C语言学习 字符串
    如果文件编码是GBK,那么他会编译成GBK编码,存储起来。   内存里面这么存储。中文是GBK编码存储,而数字和英文,是以unicode编码存储   GBK编码查询   宽......
  • c语言中获取环境变量
    #include<stdio.h>intmain(intargc,char*argv[],char*envp){/**命令行传参的时候例如:mysqlmysql-h127.0.0.1-uroot-p123*argc传入......