对于想了解前端网页学习的读者,本文将是一篇不可错过的文章,我们将详细介绍css部分,并且为您提供关于3月31日学习笔记(CSS部分)_html/css_WEB-ITnose、C++学习(七)(C语言部
对于想了解前端网页学习的读者,本文将是一篇不可错过的文章,我们将详细介绍css部分,并且为您提供关于3月31日学习笔记(CSS部分)_html/css_WEB-ITnose、C++学习(七)(C语言部分)之 输入、C++学习(三十一)(C语言部分)之 栈和队列(括号匹配示例)、C++学习(三十七)(C语言部分)之 链式栈(推箱子实现)的有价值信息。
本文目录一览:- 前端网页学习(css部分)(前端 网页)
- 3月31日学习笔记(CSS部分)_html/css_WEB-ITnose
- C++学习(七)(C语言部分)之 输入
- C++学习(三十一)(C语言部分)之 栈和队列(括号匹配示例)
- C++学习(三十七)(C语言部分)之 链式栈(推箱子实现)
前端网页学习(css部分)(前端 网页)
CSS
CSS介绍
Css:
层叠样式表/级联表
样式风格:
展开式,小写,选择器与大括号,冒号和键值,有空格
结构:
选择器+一条多条声明
选择器
选择器:单选择器和复合选择器
单选择器
单选择器:标签选择器,类选择器,id选择器,通配符选择器
1. 标签选择器
定义标签选择器:
p {
color: blue;
}
调用选择器:自动调用
- 定义方式:标签名{}
- 特点:选择某类标签。可快速全局设置样式。但不能差异化设置
2. 类选择器
定义类选择器:
.red {
color: red;
}
调用选择器:
单类名调用:
<p>gaoyang</p>
多类名调用:
<p>gaoyang</p>
- 定义方式: .类名字
- 类名字不能用标签名字
- 可以用段横线分割长名字
- 不能用纯数字和中文
- 多类目之间用空格隔开
作用:能差异化设置
3. id选择器
定义id选择器:
#gaoyang {
color: black;
font-size: 30px;
background-color: blanchedalmond;
width: 150px;
}
调用选择器:
<div id="gaoyang">gaoyang</div>
- 定义方式:#定义
- 用id调用
- 调用是一次性的
- 通常和js一起使用
4. 通配符选择器
定义通配符选择器:
* {
color: darkmagenta;
font-size: 10px;
}
调用选择器:自动调用
定义适用于所有的标签元素
复合选择器
复合选择器:后代选择器,子选择器,并集选择器,伪类选择器
1. 后代选择器(包含选择器):
通过空格 选择后代,可以是任意选择器,可跳跃选择
定义后代选择器:
ol li {
color: red;
}
.nav li a {
color: gold;
}
2. 子选择器:
通过>选择亲儿子。而非后代
定义子选择器:
.d1>a {
color: indianred;
}
3. 并集选择器:
选择多组标签,定义相同样式,统一声明。
可嵌套使用后代选择器,子选择器。
不同标签间用,隔开。
通常竖着写。
a,
li {
font-size: 30px;
}
4. 伪类选择器:
向某些选择器添加效果
链接伪类/结构伪类
用:进行分割
链接伪类:
a:link 所有未选过的链接
a:visited 选择所有已访问的链接
a:hover 位于其上的链接
a:active 活动链接(鼠标按下未弹起的链接)
按顺序声明才可生效
先写一个a{}
focus伪类:
选择表单元素
Input:focus
Css字体属性
.font {
font-family: '宋体',Arial, Helvetica, sans-serif;
/* 单引号双引号都可以 */
/* 从左往右显示 */
/* 尽量使用常用字体 */
/* body字体设置 */
font-size: 20px;
/* 字体大小 */
/* px像素 默认16 */
/* 尽量自己设置防止不同浏览器显示不同 */
font-weight: 600;
/* 字体粗细 */
/* 不加单位400normal */
font-style: italic;
/* 斜体 */
}
简写:固定顺序/最少后面俩
.font-new1 {
font: italic 700 16px '宋体'
}
.font-new2 {
font: 36px '宋体'
}
Css文本属性
颜色color:red/#cc0000/reg(255,0,1)/reg(100%,10%,10%);
水平对齐 textalign:left(默认)/right/center;
装饰文本 text-decoration:none/underline/overline/line-through;
首行缩进 text-indent:100px/-20px/3em(一个字);
行间距 line-height:50px;
三种样式表
1) 行内样式表
<div style=”color:pink”></div>
简单,单个标签
2) 内部样式表(嵌入)
<style> </style>
整个HTML页面
style在任意位置
3) 外部样式表
新建Css文件
<link rel="stylesheet" href="style008.css">
Chrome调试工具
- 打开浏览器F12/右键 检查
- Element(元素)
- 小技巧
a) Ctrl+滚轮调大小
b) 箭头定位
c) Ctrl+0复原浏览器大小
d) 没有样式(类错误)
e) 黄色三角感叹号/划掉说明代码错误
元素显示模式
元素显示模式
元素显示模式:元素标签以什么方式进行显示。
块与行内元素
块元素
<h><p><ul><ol><div>
独占一行
高度宽度,外边距,内边距都可以控制。
默认宽度是容器(父级的百分百)
是一个容器或者盒子,可以放块级元素
文字类不能放块级元素,如p/h
行内元素(内联元素)
相邻的行内元素一行可以占多个
高宽设置无效
默认宽度是本身宽度
智能容纳文本和其他行内元素
链接不能再放链接
特殊情况下a可以放块级元素
块内行元素
<img/>,<input/><td>
可以一行多个,但是有空隙。
默认宽度是本身
宽度,行高,边距可设置。
元素显示模式的转换
元素显示模式的转换:
用处:增加a的触发范围
display:block
display:input
display:input block
3月31日学习笔记(CSS部分)_html/css_WEB-ITnose
direction 属性影响块级元素中文本的书写方向、表中列布局的方向、内容水平填充其元素框的方向、以及两端对齐元素中最后一行的位置。
立即学习“前端免费学习笔记(深入)”;
注释:对于行内元素,只有当 unicode-bidi 属性设置为 embed 或 bidi-override 时才会应用 direction 属性。
direction 属性有两个值:ltr 和 rtl。大多数情况下,默认值是 ltr,显示从左到右的文本。
a:hover 必须位于 a:link 和 a:visited 之后, a:active 必须位于 a:hover 之后
list-style-type控制表项图标,值有circle,square,upper-roman,lower-alpha等。
list-style-image用图片替代表项图标,ul.img2{list-style-image: url("11.ico")}
list-style为简写样式,值可以按任意顺序列出
border-collapse ---设置是否把表格边框合并为单一的边框。
border-spacing ---设置分隔单元格边框的距离。
caption-side --- 设置表格标题的位置。
empty-cells ---设置是否显示表格中的空单元格。
table-layout ---设置显示单元、行和列的算法。
outline-color 设置轮廓的颜色。
outline-style 设置轮廓的样式。
outline-width 设置轮廓的宽度。
C++学习(七)(C语言部分)之 输入
输入学习时的笔记(其实也没什么用,留着给自己看的)
输出是指 把内容打印到控制台窗口
输入是指 把内容输入到程序里 scanf
scanf 从键盘获取内容到程序里
格式占位符+变量要加取地址符
1、格式占位符
%d 整数类型
%c 字符类型
%f 浮点型 float (不能混写和%lf不一样)
%lf double
%s 字符串
%u 无符号十进制
%x 无符号十六进制
%o 无符号八进制
2、控制输入
1、宽度 最大的接受的长度
%3d 表示能够接受多少整数 3d 是最多能接受3位 多的区域留给下一个
2.长度 h端 l长
double %lf
short %hd
long %ld
long long %lld
3、* 表示跳过 获取内容后直接丢掉
123456789
关于scanf的说明
1.scanf没有精度控制 也就是说没有%3.2lf这种说法
2.变量记得取地址 %s用于字符数组 一般不需要取地址符
3.输入多个字时 输入多个整数 小数 两个数字之间用空格 tab隔开或者回车隔开
scanf的格式占位字符串里有什么就输入什么
scanf格式占位符末尾也不要写\n
4.%d 打印一个char -->ascii码
scanf稍微严格一点 格式占位符和变量 类型要匹配 不然会报错
5.scanf_s 新版函数 _s scanf 更安全
scanf 旧版函数
scanf和scanf_s区别
输入char的时候的区别
char ch;
scanf("%c",&ch);
scanf_s("%c",&ch,1);//输入字符串的时候额外加个1
输入字符串时的区别
char arr[20];
scanf("%s",arr);
scanf_s("%s",arr,20);//20是数组的大小 表示最多能够读取到20个字符
除了上面两种情况 scanf和scanf_s没有区别 用法一致
warning c4996 指明了代替的新函数 直接用新函数就行
6.scanf的输入的时候 两个getchar
在屏幕上输入 按下回车后 进入到缓冲区中
\n留在缓冲区里
scanf是在缓冲区里读取数据
getchar();在缓冲区里读数据
不报错不代表没有错误
*****************************我是分割线*****************************************/
#include<stdio.h>
int main()
{
//例一:让用户输入年龄
//printf("请输入你的年龄\n");//提示
//int age;
//scanf("%d",&age);//记得加上取地址符
//printf("用户的年龄是%d\n",age);
//例二:让用户输入手机号
//int num1, num2;
//printf("请输入你的电话号码\n");
//scanf("%3d%*4d%4d",&num1,&num2);//%*4d舍弃
//printf("用户的电话号码是%3d****%4d\n",num1,num2);
//例三:
//char arr[20];// 字符数组 [数组大小] char 数组名[数组大小] 字符数组的定义格式
//字符串一般存放在字符数组中 \0是字符串结尾
//数组大小 >=字符串中字符个数
//字符产中的字符个数+1 字符创中的中文一个汉字占两位
//printf("请输入字符串:");
//scanf("%s",arr);
//printf("输入的内容是:%s",arr);//不需要加取地址符
//例四:输入时隔开的例子
//int num1, num2;
//printf("请输入年龄和身高\n");
//scanf("%d,%d",&num1,&num2);//加了逗号之后 输入时只能用逗号隔开 否则一般是空格键
//printf("%d岁,%d厘米\n",num1,num2);
//例五
//char x, y;
//scanf("%d%d",&x,&y);
//printf("%d岁,%d厘米",x,y);
getchar();//如果有scanf 最好加上两个getchar 只需要用到两个
getchar();
while (1);//死循环 防止提前退出
return 0;
}
2018.05.22 11:39:28
C++学习(三十一)(C语言部分)之 栈和队列(括号匹配示例)
括号匹配测试代码笔记如下:
1 #include<stdio.h>
2 #include<string.h>
3 #include <stdlib.h>
4 #define SIZE 10
5
6 typedef struct Stack
7 {
8 char c[SIZE]; //存放左弧 它是一个字符
9 int top;
10 }STACK,*PSTACK;
11
12 //1.初始化栈
13 void Init_Stack(PSTACK S) //这里只需要一个参数 把栈传进来初始化
14 {
15 S->top = 0; //栈顶是从第0个下标开始
16 for (int i = 0; i < SIZE; i++)
17 {
18 S->c[i] = 0;
19 }
20 }
21
22 //2.入栈操作
23
24 void Push_Stack(PSTACK S, char data) //参数1:表明插入的栈 参数2: 要插入的数据
25 {
26 //2.1 判断栈是否是满的 如果是满的就退出 满了你还要插入 会报错
27
28 if (S->top >= SIZE)
29 {
30 printf("栈满!无法继续插入\n");
31 return; //结束这个函数.
32 }
33
34 //2.2 栈没有满
35 S->c[S->top] = data;
36 S->top++; //在执行插入操作之后 我的top要+1
37 }
38
39 //3.获取栈顶元素 这里只是得到栈顶元素 不是出栈
40 char GetStackTop(PSTACK S)
41 {
42 return S->c[S->top - 1];
43 }
44
45 //4. 出栈
46 void Pop_Stack(PSTACK S)
47 {
48 //这里我就不判断 判断是不是空
49
50 S->top--; //所有操作都是同top去操作 我只需要改变top的位置
51 }
52
53 //5.判断是不是空的栈
54 int Stack_Empty(PSTACK S) //函数返回1 说明什么栈是空的 如果返回0说明栈是有元素的
55 {
56 return S->top == 0; //等于0说明栈是空的
57 }
58 //我只需要在前面代码的基础 加一个函数
59 int isEatch(PSTACK S, char *str) // 参数1: 指明左弧要入栈的是哪一个栈 参数2:要匹配的字符串 返回值:返回1说明匹配 返回0说明不匹配
60 {
61 // 得到要匹配的字符串长度
62 int len = strlen(str);
63 //循环遍历每一个字符
64 for (int i = 0; i < len; i++) // () [] {}
65 {
66 switch (str[i])
67 {
68 case ''('':
69 case ''['':
70 case ''{'':
71 //如果是左弧 要入栈
72
73 Push_Stack(S, str[i]);
74 break;
75 case '')'':
76 if (!Stack_Empty(S) && GetStackTop(S) == ''('')
77 {
78 Pop_Stack(S);
79 }
80 else
81 {
82 return 0; //如果栈为空 或者 栈顶元素跟当前元素不匹配
83 }
84 break;
85 case '']'': //自己写
86 break;
87 case ''}'': //自己写
88 break;
89 }
90 }
91 //判断最后栈里面是否还有数据 如果右说明是不匹配
92 if (!Stack_Empty(S))
93 {
94 return 0;
95 }
96 //返回1 说明是匹配的
97 return 1;
98
99 }
100
101 int main()
102 {
103 STACK MyStack;
104 Init_Stack(&MyStack);
105 char Str[258];
106 while (1)
107 {
108 printf("请输入一个字符串: ");
109 scanf("%s", Str);
110 int a = isEatch(&MyStack, Str);
111 if (a)
112 {
113 printf("括号匹配!\n");
114 }
115 else
116 {
117 printf("括号不匹配!\n");
118 }
119 }
120 return 0;
121 }
C++学习(三十七)(C语言部分)之 链式栈(推箱子实现)
用链表实现栈
一开始在表头插入,就要一直在表头插入
一开始在表尾插入,就要一直在表头插尾
表头当栈底 也可以把表尾当栈底
实现的测试代码笔记如下:
1 #include<stdio.h>
2 #include<stdlib.h>
3 #include<string.h>
4
5 //节点的结构体
6 typedef struct Node
7 {
8 char *name;
9 struct Node *pNext;
10 }LIST, *PLIST;
11
12 //1.创建“火车头” 创建一个表头
13 void CreateListHead(PLIST *p_list) //传入头结点指针 给他分配内存
14 {
15 //一级指针 形参和实参结合时
16 //PLIST p_list = p_head; 形参和实参结合时候的赋值
17 //p_list 改变 是不影响到p_head 就好像是A给B发送了一个文件 B对文件进行了修改,是不会影响A手中的文件
18
19 //要改变一级指针的实参 函数要传入一级指针的地址 保存一级指针的地址 要使用二级指针
20 *p_list = (PLIST)malloc(sizeof(LIST));
21 (*p_list)->pNext = NULL;
22
23 }
24
25 //实现一个栈
26 //2.写入栈函数
27 void Push_Stack(PLIST p_list, char *name)
28 {
29 //头插法
30 PLIST node = (PLIST)malloc(sizeof(LIST));
31 //node->name - name; 可以这么写 但是如果存入得扇区内存,会被释放掉 就会出错
32 node->name = (char *)malloc(sizeof(char)*strlen(name) + 1);
33 strcpy(node->name, name);
34 node->pNext = p_list->pNext;
35 p_list->pNext = node;
36 }
37
38 //3.获取栈顶元素
39 char * GetStackTop(PLIST p_list)
40 {
41 //如果不是空 就返回头结点的下一个节点的name
42 PLIST p_Temp = p_list->pNext;
43 if (p_Temp != NULL)
44 {
45 return p_Temp->name;
46 }
47 return NULL; //说明栈是空
48 }
49
50 //4.出栈
51 void Pop_Stack(PLIST p_list)
52 {
53 //相当于删除结点 之前是头插法 那么最后一个在最前面
54 PLIST p_Temp = p_list->pNext;
55 if (p_Temp != NULL)
56 {
57 //p_remp保存第一个节点的地址
58 p_Temp = p_list->pNext;
59 //让头结点的pnext连接到第二个节点
60 p_list->pNext = p_Temp->pNext;
61 }
62 free(p_Temp); //释放内存 释放掉第一个节点 是释放p_temp里面所保存的内存 而不是释放指针变量
63 }
64
65 //5.判断栈是否为空
66 int isEmpty(PLIST p_list)
67 {
68 //如果栈为空 返回1
69 return p_list->pNext == NULL;
70 }
71
72 int main()
73 {
74 PLIST p_head = NULL; //作为链表的标记
75 CreateListHead(&p_head);
76 /*if (NULL == p_head)
77 {
78 printf("内存分配失败!\n");
79 }
80 else
81 {
82 printf("内存分配成功!\n");
83 }*/
84
85 Push_Stack(p_head, "力");
86 Push_Stack(p_head, "努");
87 Push_Stack(p_head, "的");
88 Push_Stack(p_head, "人");
89 Push_Stack(p_head, "何");
90 Push_Stack(p_head, "任");
91 Push_Stack(p_head, "于");
92 Push_Stack(p_head, "亚");
93 Push_Stack(p_head, "不");
94 Push_Stack(p_head, "的");
95 Push_Stack(p_head, "出");
96 Push_Stack(p_head, "付");
97 while (!isEmpty(p_head))
98 {
99 printf("%s", GetStackTop(p_head));
100 Pop_Stack(p_head);
101 }
102
103 getchar();
104 return 0;
105 }
附:
推箱子实现,代码笔记如下所示:
1 1、main.cpp文件
2
3 //推箱子
4 //操作说明 WASD表示上下左右移动 空格键可以退回到上一步
5 #if 1
6 #include<graphics.h>
7 #include<stdio.h>
8 #include <conio.h>
9
10 #include "Stack.h"
11 //地图
12 int Map[9][8] = {
13 0, 0, 1, 1, 1, 1, 1, 0,
14 1, 1, 1, 0, 0, 0, 1, 0,
15 1, 3, 5, 4, 0, 0, 1, 0,
16 1, 1, 1, 0, 4, 3, 1, 0,
17 1, 3, 1, 1, 4, 0, 1, 0,
18 1, 0, 1, 0, 3, 0, 1, 1,
19 1, 4, 0, 7, 4, 4, 3, 1,
20 1, 0, 0, 0, 3, 0, 0, 1,
21 1, 1, 1, 1, 1, 1, 1, 1
22 };
23
24 //实现退回操作
25 void Retrogress(PLIST p_list)
26 {
27 //1.获取栈顶数据
28 PLIST p_Temp = GetStackTop(p_list);
29 if (NULL == p_Temp)
30 {
31 return;
32 }
33 for (int i = 0; i < 9; i++)
34 {
35 for (int j = 0; j < 8; j++)
36 {
37 Map[i][j] = p_Temp->p[i][j];
38 }
39 }
40 Pop_Stack(p_list); //出栈
41 }
42
43 //对于一个游戏1.初始化 加载图片
44 IMAGE g_box, g_dbox, g_people, g_point, g_wall, g_blank;
45 void Init_Game()
46 {
47 loadimage(&g_box, L"./source/box.jpg"); //相对路径
48 loadimage(&g_dbox, L"./source/dbox.jpg");
49 loadimage(&g_people, L"./source/people.jpg");
50 loadimage(&g_point, L"./source/point.jpg");
51 loadimage(&g_wall, L"./source/wall.jpg");
52 loadimage(&g_blank, L"./source/blank.jpg");
53 }
54
55 //2.加载图片
56 void Paint_Game()
57 {
58 for (int i = 0; i < 9; i++)
59 {
60 for (int j = 0; j < 8; j++)
61 {
62 switch (Map[i][j])
63 {
64 case 0: //0表示空地
65 putimage(j * 45, i * 45, &g_blank);
66 break;
67 case 1: // 1表示墙壁
68 putimage(j * 45, i * 45, &g_wall);
69 break;
70 case 3: // 3表示目的地
71 putimage(j * 45, i * 45, &g_point);
72 break;
73 case 4: // 4表示箱子
74 putimage(j * 45, i * 45, &g_box);
75 break;
76 case 5: // 5表示人
77 putimage(j * 45, i * 45, &g_people);
78 break;
79 case 7: // 7表示箱子在目的地 4+3
80 putimage(j * 45, i * 45, &g_dbox);
81 break;
82 case 8: // 8表示人在目的地 5+3
83 putimage(j * 45, i * 45, &g_people);
84 break;
85 }
86 }
87 }
88 }
89
90 //3.实现人物移动
91 void MovePeople(PLIST p_list)
92 {
93 int i, j;
94 for (i = 0; i < 9; i++)
95 {
96 for (j = 0; j < 8; j++)
97 {
98 //找到人的位置
99 if (Map[i][j] == 5 || Map[i][j] == 8)
100 {
101 //if成立说明找到人
102 break;
103 }
104 }
105 if (Map[i][j] == 5 || Map[i][j] == 8)
106 {
107 //if成立说明找到人
108 break;
109 }
110 }
111 switch (getch())
112 {
113 //表示往左边移动
114 case ''a'':
115 //人的左边是空地 或者 是目的
116 if (Map[i][j - 1] == 0 || Map[i][j - 1] == 3)
117 {
118 Map[i][j - 1] += 5; //人往左边移动
119 Map[i][j] -= 5; //人离开了当前位置
120 }//人的左边是箱子或者是箱子在目的
121 else if (Map[i][j - 1] == 4 || Map[i][j - 1] == 7)
122 {
123 if (Map[i][j - 2] == 0 || Map[i][j - 2] == 3)
124 {
125 Map[i][j - 2] += 4;
126 Map[i][j - 1] += 1;
127 Map[i][j] -= 5;
128 }
129 }
130 //每次移动都要入栈
131 Push_Stack(p_list, Map);
132 break;
133
134 //表示往右边
135 case ''d'':
136 //人的右边是空地 或者 是目的
137 if (Map[i][j + 1] == 0 || Map[i][j + 1] == 3)
138 {
139 Map[i][j + 1] += 5; //人往左边移动
140 Map[i][j] -= 5; //人离开了当前位置
141 }//人的右边是箱子或者是箱子在目的
142 else if (Map[i][j + 1] == 4 || Map[i][j + 1] == 7)
143 {
144 if (Map[i][j + 2] == 0 || Map[i][j + 2] == 3)
145 {
146 Map[i][j + 2] += 4;
147 Map[i][j + 1] += 1;
148 Map[i][j] -= 5;
149 }
150 }
151 //每次移动都要入栈
152 Push_Stack(p_list, Map);
153 break;
154
155 //表示往上边移动
156 case ''w'':
157 //人的上边是空地 或者 是目的
158 if (Map[i - 1][j] == 0 || Map[i - 1][j] == 3)
159 {
160 Map[i - 1][j] += 5; //人往上边移动
161 Map[i][j] -= 5; //人离开了当前位置
162 }//人的上边是箱子或者是箱子在目的
163 else if (Map[i - 1][j] == 4 || Map[i - 1][j] == 7)
164 {
165 if (Map[i - 2][j] == 0 || Map[i - 2][j] == 3)
166 {
167 Map[i - 2][j] += 4;
168 Map[i - 1][j] += 1;
169 Map[i][j] -= 5;
170 }
171 }
172 //每次移动都要入栈
173 Push_Stack(p_list, Map);
174 break;
175
176 //表示什么往下边移动
177 case ''s'':
178 //人的下边是空地 或者 是目的
179 if (Map[i + 1][j] == 0 || Map[i + 1][j] == 3)
180 {
181 Map[i + 1][j] += 5; //人往左边移动
182 Map[i][j] -= 5; //人离开了当前位置
183 }//人的下边是箱子或者是箱子在目的
184 else if (Map[i + 1][j] == 4 || Map[i + 1][j] == 7)
185 {
186 if (Map[i + 2][j] == 0 || Map[i + 2][j] == 3)
187 {
188 Map[i + 2][j] += 4;
189 Map[i + 1][j] += 1;
190 Map[i][j] -= 5;
191 }
192 }
193 //每次移动都要入栈
194 Push_Stack(p_list, Map);
195 break;
196 case VK_SPACE: //空格
197 if (!isEmpty(p_list))
198 {
199 Retrogress(p_list);
200 Paint_Game();
201 }
202 }
203 }
204
205 //4.判断游戏是否结束
206 int isWin()
207 {
208 for (int i = 0; i < 9; i++)
209 {
210 for (int j = 0; j < 8; j++)
211 {
212 if (Map[i][j] == 4)
213 {
214 return 0;
215 }
216 }
217 }
218 return 1;
219 }
220
221 int main()
222 {
223 initgraph(360, 405); //初始化图形界面
224 Init_Game();
225 PLIST p_head = NULL;
226 CreateListHead(&p_head);
227 Paint_Game();
228 while (!isWin())
229 {
230 Paint_Game();
231 MovePeople(p_head);
232 }
233 Paint_Game();
234 getchar();//防止运行到closegraph() 直接退出 看不到效果
235 closegraph(); //关闭图形界面
236
237 return 0;
238 }
239
240
241 *********************分割线************************
242
243
244 2、Stack.h文件
245 #include <stdlib.h>
246 #include <stdio.h>
247 /*
248 以后 头文件是用来声明函数 或者类
249 */
250 typedef struct Node
251 {
252 //char *name; //前面是不是讲过动态分配二维数组
253 //通过指针数组来实现
254 int **p; //目的:分配二维数组用来保存我的地图信息
255 struct Node * pNext;
256 }LIST, *PLIST;
257
258 void CreateListHead(PLIST *p_list);
259
260 void Push_Stack(PLIST p_list, int(*pArr)[8]);
261
262 //返回整个结点的内容
263 PLIST GetStackTop(PLIST p_list);
264
265 void Pop_Stack(PLIST p_list);
266
267 int isEmpty(PLIST p_list);
268
269
270 *********************分割线************************
271
272
273 3、Stack.cpp文件
274 #include "Stack.h"
275
276 void Push_Stack(PLIST p_list, int(*pArr)[8])
277 {
278 PLIST node = (PLIST)malloc(sizeof(LIST));
279 //先给二级指针申请内存
280 node->p = (int **)malloc(sizeof(int)* 9); // p就相当于是一个 指针数组 int *p[9]
281 for (int i = 0; i < 9; i++)
282 {
283 //通过这个就能够分配一个二维数组
284 node->p[i] = (int*)malloc(sizeof(int)* 8);
285 }
286 for (int i = 0; i < 9; i++)
287 {
288 for (int j = 0; j < 8; j++)
289 {
290 node->p[i][j] = pArr[i][j];
291 }
292 //代码 提升写代码能 语法有关
293 //思路 实现功能 首先你要有思路
294 //逻辑 你的方法的逻辑性是否可以
295 // 栈 链表
296 }
297 //连接指针
298 node->pNext = p_list->pNext;
299 p_list->pNext = node;
300 // int a[5]
301 // int *a[5] a二级指针
302 }
303
304 PLIST GetStackTop(PLIST p_list)
305 {
306 if (p_list->pNext != NULL)
307 {
308 return p_list->pNext;
309 }
310 return NULL;
311 }
312
313 void Pop_Stack(PLIST p_list)
314 {
315 PLIST p_Temp = NULL;
316 if (p_list->pNext != NULL)
317 {
318 //p_temp保存第一节点的地址
319 p_Temp = p_list->pNext;
320
321 //让头节点的pnext连接到第二个结点
322 p_list->pNext = p_Temp->pNext;
323 }
324 //释放掉第一个结点
325 free(p_Temp); //会释放p_temp里面所保存的内存 而不是释放指针变量
326 }
327
328 int isEmpty(PLIST p_list)
329 {
330 return p_list->pNext == NULL;
331 }
332
333 void CreateListHead(PLIST *p_list) //传入头节点指针 给它分配内存
334 {
335 *p_list = (PLIST)malloc(sizeof(LIST));
336 (*p_list)->pNext = NULL;
337 }
最后实现效果如下所示;
2019-04-01 21:33:15
我们今天的关于前端网页学习和css部分的分享已经告一段落,感谢您的关注,如果您想了解更多关于3月31日学习笔记(CSS部分)_html/css_WEB-ITnose、C++学习(七)(C语言部分)之 输入、C++学习(三十一)(C语言部分)之 栈和队列(括号匹配示例)、C++学习(三十七)(C语言部分)之 链式栈(推箱子实现)的相关信息,请在本站查询。
本文标签: