分类 Learn 下的文章

typedef struct Link{
    char elem; //代表数据域
    struct Link * next; //代表指针域,指向直接后继元素
}link; //link为节点名,每个节点都是一个 link 
//提示,由于指针域中的指针要指向的也是一个节点,因此要声明为 Link 类型
(这里要写成 struct Link* 的形式)。

  1. 头指针:一个普通的指针,它的特点是永远指向链表第一个节点的位置。很明显,头指针用于指明链表的位置,便于后期找到链表并使用表中的数据;
  2. 节点:链表中的节点又细分为头节点、首元节点和其他节点:
    • 头节点:其实就是一个不存任何数据的空节点,通常作为链表的第一个节点。对于链表来说,头节点不是必须的,它的作用只是为了方便解决某些实际问题;
    • 首元节点:由于头节点(也就是空节点)的缘故,链表中称第一个存有数据的节点为首元节点。首元节点只是对链表中第一个存有数据节点的一个称谓,没有实际意义;
    • 其他节点:链表中其他的节点;

创建一个存储 {1,2,3,4} 的链表,C 语言完整代码如下:

#include <stdio.h>
#include <stdlib.h>
//链表中节点的结构
typedef struct Link {
    int  elem;
    struct Link *next;
}link;
//初始化链表的函数
link * initLink();
//用于输出链表的函数
void display(link *p);

int main() {
    link*p = NULL;
    //初始化链表(1,2,3,4)
    printf("初始化链表为:\n");
    p = initLink();
    display(p);
    return 0;
}

link * initLink() {
    int i;
    link * p = NULL;//创建头指针
    link * temp = (link*)malloc(sizeof(link));//创建首元节点
    //首元节点先初始化
    temp->elem = 1;
    temp->next = NULL;
    p = temp;//头指针指向首元节点
    for (i = 2; i < 5; i++) {
        link *a = (link*)malloc(sizeof(link));
        a->elem = i;
        a->next = NULL;
        temp->next = a;
        temp = temp->next;
    }
    return p;
}
void display(link *p) {
    link* temp = p;//将temp指针重新指向头结点
    //只要temp指针指向的结点的next不是Null,就执行输出语句。
    while (temp) {
        printf("%d ", temp->elem);
        temp = temp->next;
    }
    printf("\n");
}

注意,如果使用带有头节点创建链表的方式,则输出链表的 display 函数需要做适当地修改:

void display(link *p){
    link* temp=p;//将temp指针重新指向头结点
    //只要temp指针指向的结点的next不是Null,就执行输出语句。
    while (temp->next) {
        temp=temp->next;
        printf("%d",temp->elem);
    }
    printf("\n");
}

--> 链表中每个数据的存储都由以下两部分组成:数据元素本身,其所在的区域称为数据域;指向直接后继元素的指针,所在的区域称为指针域;因此,链表中每个节点的具体实现,需要使用 C 语言中的结构体,具体实现代码为typedef struct Link{ char elem; //代表数据域 struct Link * next; //代表指针域,指向直接后继元素}link; //link为节...

运用继承,接口,包等技术,编写求解几何图形(包括三角形,矩形,圆)的周长,面积

//package oop123;              //包
import java.io.*;              //引入键盘输入所需要的类所在的包
interface getProperty{         //接口定义,方法声明
	double Pi = 3.1415926;
	double getArea();          //面积
	double getCircum();        //周长
	String getName();          //名称
}

class mpoint{                  //定义点
	static int i = 0;
	double x,y;
	mpoint(double a,double b){
		this.x = a;
		this.y = b;
	}
	double getX(){
		return x;
	}
	double getY(){
		return y;
	}

}

class disp{                  //定义屏幕输出所需要的类
	double area;             //面积
	double circum;           //周长
	String drawingName;      //名称
	disp(double a,double b,String ss){
		this.area = a;
		this.circum = b;
		this.drawingName = ss;
	}
	public void display(){
		System.out.println("图像 是 "+ drawingName);
		System.out.println("面积 = "+area+'\n'+"周长 = "+circum);
	}
}

class triangle implements getProperty{    //定义三角形
	mpoint p1,p2,p3;                      //三点
	double s1,s2,s3;                      //三边 
	String drawingName = "triangle";
	triangle(mpoint p1,mpoint p2, mpoint p3){ //构造方法
		this.p1 = p1;
		this.p2 = p2;
		this.p3 = p3;
		this.s1 = Math.sqrt((p1.x - p2.x)*(p1.x - p2.x)+(p1.y-p2.y)*(p1.y-p2.y));
		this.s2 = Math.sqrt((p3.x - p2.x)*(p3.x - p2.x)+(p3.y-p2.y)*(p3.y-p2.y));
		this.s3 = Math.sqrt((p1.x - p3.x)*(p1.x - p3.x)+(p1.y-p3.y)*(p1.y-p3.y));
	}
	 //方法实现
	public double getArea(){      
		double ss,ssa;
		ss = (s1+s2+s3)*Pi/2.0/Pi;
		ssa = Math.sqrt(ss*(ss-s1)*(ss-s2)*(ss-s3));
		return ssa;
	}
	public double getCircum(){
		return s1+s2+s3;
	}
	public String getName(){
        return drawingName;
	}
	public boolean tline(){
		return true;
	}
}

class circle implements getProperty{     //定义圆形
	mpoint p1;                           //圆心
	double radius;                       //半径
	String drawingName = "Circle";
	circle(mpoint p1,double radius){    //构造方法
		this.p1 = p1;
		this.radius = radius;
	}
	public double getArea(){
		double ssa;
		ssa = Math.PI*radius*radius;
		return ssa;
	}
	public double getCircum(){
		return Math.PI*2.0*radius;
	}
	public String getName(){
		return drawingName;
	}
	public boolean tcircle(){
		return true;
	}
}

class rectangle implements getProperty{   //定义长方形
	mpoint p1,p2;
	double s1,s2;
	String drawingName = "Rectangle";
	rectangle(mpoint p1,mpoint p2){
		this.p1 = p1;
		this.p2 = p2;
		this.s1 = Math.sqrt((p1.x-p2.x)*(p1.x-p2.x));
		this.s2 = Math.sqrt((p1.y-p2.y)*(p1.y-p2.y));
	}
	public double getArea(){
		return s1*s2;	
	}
	public double getCircum(){
		return s1+s2+s1+s2;
	}
	public String getName(){
		return drawingName;
	}
	public boolean rline(){
		return true;
	}
}
public class drawing extends disp{      //定义 main() 所在的类
	drawing (double a, double b, String ss){
		super(a,b,ss);
//由于子类不能继承父类的构造方法,因此,如果要调用父类的构造方法,
//可以使用 super 关键字。super 可以用来访问父类的构造方法、普通方法和属性。
	}
	public static void main(String[] args) throws IOException {
         BufferedReader keyin = new BufferedReader(new InputStreamReader(System.in));
//new BufferedReader 将字符流放到字符流缓冲区之中
//new InputStreamReader 将字节流变为字符流
//System.in 字节输入流
         String strxx;
         for(;true;){
         	System.out.println("输入字符串如 Triangle,Rectangle,Circle:");
         	strxx = keyin.readLine();  //读取输入
         	if(strxx.length() == 0) continue;
         	char charxx;
         	charxx = strxx.toUpperCase().charAt(0);  //大小写转换
         	switch(charxx)
         	{
             	case'T':         //三角形
             	System.out.println("请输入(三角形) 第一个点 x(enter) y(enter)");
             	mpoint p1 = new mpoint(aVar(keyin),aVar(keyin));
             	System.out.println("请输入(三角形) 第二个点 x(enter) y(enter)");
             	mpoint p2 = new mpoint(aVar(keyin),aVar(keyin));
             	System.out.println("请输入(三角形) 第三个点 x(enter) y(enter)");
             	mpoint p3 = new mpoint(aVar(keyin),aVar(keyin));
             	triangle t1 = new triangle(p1,p2,p3);  //构造三角形
             	disp tdisp = new drawing(t1.getArea(),t1.getCircum(),t1.getName());
             	tdisp.display();
             	break;
             	
             	case'C':        //圆形
             	System.out.println("请输入(圆形) 圆心 x(enter) y(enter)");
             	mpoint p4 = new mpoint(aVar(keyin),aVar(keyin));
             	System.out.println("请输入半径 x(enter)");
             	double radius = aVar(keyin);
             	circle t2 = new circle(p4,radius);   //构造圆形
             	disp cdisp = new drawing(t2.getArea(),t2.getCircum(),t2.getName());
             	cdisp.display();
             	break;
             	
             	case'R':        //长方形
                System.out.println("请输入(长方形)第一个点 x(enter) y(enter)");
                mpoint p6 = new mpoint(aVar(keyin),aVar(keyin));
                System.out.println("请输入(长方形)第一个点 x(enter) y(enter)");
                mpoint p7 = new mpoint(aVar(keyin),aVar(keyin));
                rectangle t3 = new rectangle(p6,p7);   //构造长方形
                disp rdisp = new drawing(t3.getArea(),t3.getCircum(),t3.getName());
                rdisp.display();
                break;
                
                default:System.out.println("错误,请输入 t(T),c(C),r(R)");
         	}//switch
         }//for循环
	}//main 方法
	static double aVar(BufferedReader keyin) throws IOException
	{//得到一个双变量
		String xx;
		xx = keyin.readLine();
		return Double.parseDouble(xx);

	}
}

--> 运用继承,接口,包等技术,编写求解几何图形(包括三角形,矩形,圆)的周长,面积//package oop123; //包import java.io.*; //引入键盘输入所需要的类所在的包interface getProperty{ //接口定义,方法声明 double Pi = 3.1415926; double get...

sudo apt install wget g++

2.安装deepin-wine

wget http://packages.deepin.com/deepin/pool/non-free/d/deepin-wine/deepin-wine_2.18-22~rc0_all.deb
# 开始安装
sudo dpkg -i *.deb
# 安装依赖
sudo apt install -fy

3.安装微信

wget http://packages.deepin.com/deepin/pool/non-free/d/deepin.com.wechat/deepin.com.wechat_2.6.8.65deepin0_i386.deb
sudo dpkg -i deepin.com.wechat_2.6.8.65deepin0_i386.deb

其他软件源

https://github.com/zq1997/deepin-wine
完整列表见 https://deepin-wine.i-m.dev/

? 尽量将main restricted universe multiverse这几个系统源都启用(自行百度),免得依赖问题多。
? 安装后需要注销重登录才能显示应用图标。
? 出了问题?先去github主页看README,再看别人提过的issue,再百度搜搜,避免直接就提issue

--> 1.安装必要工具及deepin-wine的依赖sudo apt install wget g++2.安装deepin-winewget http://packages.deepin.com/deepin/pool/non-free/d/deepin-wine/deepin-wine_2.18-22~rc0_all.deb# 开始安装sudo dpkg -i *.deb# 安装依赖sudo a...

 //假设你发现前台运行的一个程序需要很长的时间,但是需要干其他的事情,
//你就可以用 Ctrl-Z ,终止这个程序,然后可以看到系统提示:
[1]+ Stopped /root/bin/rsync.sh

//jobs 显示当前暂停的进程
jobs
[1]+ Running /root/bin/rsync.sh &

// bg N 使第N个任务在后台运行
bg 1

//如果想把它调回到前台运行,可以用fg 
//fg N 使第N个任务在前台运行
fg 1

//默认bg,fg不带 N 时表示对最后一个进程操作

 总结:

    (1) CTRL+Z停止进程并放入后台

    (2) jobs 显示当前暂停的进程

    (3) bg N 使第N个任务在后台运行(%前有空格)

    (4) fg N 使第N个任务在前台运行

    默认bg,fg不带N时表示对最后一个进程操作!

--> linux下:ctrl-c  发送 SIGINT 信号给前台进程组中的所有进程。常用于终止正在运行的程序。ctrl-z  发送 SIGTSTP 信号给前台进程组中的所有进程,常用于挂起一个进程。ctrl-d  不是发送信号,而是表示一个特殊的二进制值,表示 EOF。ctrl-\  发送 SIGQUIT 信号给前台进程组中的所有进程,终止前台进程并生成 ...

#include <stdio.h>
#include <string.h>
char * s_gets(char * st, int n);
#define MAXTITL   40
#define MAXAUTL   40
#define MAXBKS   100              //最大书籍数

struct book {                     //建立book结构声明
    char title[MAXTITL];
    char author[MAXAUTL];
    float value;
};

int main(void)
{
    struct book library[MAXBKS]; //book 类型结构的数组
    int count = 0;
    int index;
    
    printf("Please enter the book title.\n");
    printf("Press [enter] at the start of a line to stop.\n");
    while (count < MAXBKS && s_gets(library[count].title, MAXTITL) != NULL
           && library[count].title[0] != '\0')

//library[count].title[0] != '\0'判断字符串中的首字符是否为空字符
//按下 Enter 键相当于输入了一个字符串
    {
        printf("Now enter the author.\n");
        s_gets(library[count].author, MAXAUTL);
        printf("Now enter the value.\n");
        scanf("%f", &library[count++].value);
        while (getchar() != '\n')
            continue;          //清理输入行
        if (count < MAXBKS)
            printf("Enter the next title.\n");
    }
    
    if (count > 0)
    {
        printf("Here is the list of your books:\n");
        for (index = 0; index < count; index++)
            printf("%s by %s: $%.2f\n", library[index].title,
                   library[index].author, library[index].value);
    }
    else
    	printf("No books? Too bad.\n");
    
    return 0;
}

char * s_gets(char * st, int n)
{
    char * ret_val;
    char * find;
    
    ret_val = fgets(st, n, stdin);
    if (ret_val)
    {
        find = strchr(st, '\n');   // 查找换行符
        if (find)                  //如果地址不是NULL
            *find = '\0';          // 在此处放置一个空字符
        else
            while (getchar() != '\n')
                continue;          // 处理输入行中剩余的字符
    }
    return ret_val;
}

--> #include <stdio.h> #include <string.h> char * s_gets(char * st, int n); #define MAXTITL 40 #define MAXAUTL 40 #define MAXBKS 100 //最大书籍数 struct book { ...