每日刷题计划-2-12

112 阅读3分钟

「这是我参与2022首次更文挑战的第24天,活动详情查看:2022首次更文挑战

BC138 KiKi学结构体和指针

描述

KiKi学习了结构体和指针,他了解了结构体类型可以定义包含多个不同类型成员,而指针本质是内存地址,是引用数据的另外一种方式。现在他想将多个输入的数据通过结构体和指针的方式连接在一起,形成一个单向链表,即:每个结点是结构体类型,包括整型数据成员(data)和结构体指针类型成员(next),每个结点的指针部分指向下一个输入的结点。具体建立过程如下:先输入n个整数,按照数据输入的顺序建立一个带头结点的单链表,再输入一个数据m,将单链表中的值为m的结点全部删除。输出删除后的单链表信息。

输入描述:

包括三行:

第一行输入数据个数n (3≤n≤100);

第二行依次输入n个整数,用空格分隔;

第三行输入欲删除数据m。

输出描述:

包括两行:

第一行输出完成删除后的单链表长度;

第二行依次输出完成删除后的单链表数据。

示例1

输入:

5
1 2 2 3 4
2

复制

输出:

3
1 3 4

复制

#include<stdio.h>
#include<malloc.h>	
typedef struct SeqlistNode
{
	int data;
	struct SeqlistNode* next;
}Node;
struct Top
{
	Node* head;	//指向头节点
	Node* tail;//指向尾节点
};
Node* BuyNewnode(int data)
{
	Node* newnode = (Node*)malloc(sizeof(Node));
	if (newnode == NULL)
	{
		printf("malloc fail\n"); 
			return NULL;
	}
	else
	{
		newnode->next = NULL;
		newnode->data = data;
		return newnode;
	}
}
int main()
{
	struct Top phead;//带头节点的单链表
	//初始化
	phead.head = NULL;
	phead.tail = NULL;
	int n = 0;
	int i = 0;
	int data = 0;
	scanf("%d", &n);
	//输入n个数
	for (i = 0; i < n; i++)
	{
		scanf("%d", &data);
		Node* newnode = BuyNewnode(data);
		//先判断一开始链表有无节点
		if (phead.head == NULL)
		{
			//无节点
			phead.head = phead.tail = newnode;
		}

		else
		{
			//已经有节点
			phead.tail->next = newnode;	//原来的尾节点链接新节点
			phead.tail = newnode;		//尾指针指向新的节点
		}
	}
	int m = 0;
	scanf("%d", &m);//输入要删除的数据
	//遍历删除
	//定义两个指针,一个快一个慢,用来链接要删除的前后节点
	 Node* cur = phead.head;
	 Node* prev = NULL;
	 while (cur)
	 {
		 if (cur->data == m)
		 {
			//要删的是第一个节点
			 if (cur == phead.head)
			 {
				 n--;
				 phead.head = cur->next;	//头指针指向下一个节点
				 free(cur);
				 cur = phead.head;
			 }
			 //删的不是第一个节点
			 else
			 {
				 n--;
				 prev->next = cur->next;//要删除位置节点的上一个节点链接下一个节点
				 free(cur);
				 cur = prev;
			 }
		 }
		 else
		 {
			 prev = cur;
			 cur = cur->next;
		 }
	}
	 printf("%d\n", n);
	//打印链表
	Node* PP = phead.head;
	while (PP)
	{
		printf("%d ", PP->data);
		PP = PP->next;
	}
	return 0;
}

BC139 KiKi定义电子日历类

描述

KiKi学习了面向对象技术,学会了通过封装属性(变量)和行为(函数)定义类,现在他要设计一个电子日历类TDate。

它有3个私有数据成员:Month,Day,Year和若干个公有成员函数,要求:

(1)带有默认形参值的构造函数,默认值为0, 0, 0; (2)输出日期函数,用“日/月/年”格式输出日期; (3)设置日期函数,从键盘输入年、月、日。

输入描述:

一行,三个整数,用空格分隔,分别表示年、月、日。

输出描述:

一行,用“日/月/年”格式输出日期。

示例1

输入:

2019 12 30

复制

输出:

30/12/2019

复制

#include<stdio.h>
struct Tday
{
    int year;
    int mouth;
    int day;
};
int main()
{
    struct Tday a1={0};
        scanf("%d",&(a1.year));
        scanf("%d",&(a1.mouth));
        scanf("%d",&(a1.day));
    printf("%d/%d/%d",a1.day,a1.mouth,a1.year);
    return 0;
}