预备役2022.1.9学习总结2

一、上午

1.记百词斩四级词汇100个,并抄了一遍。(3h)

一、下午

1.看数据结构(1h)

栈和队列

一、栈是限定仅在表尾进行插入和删除操作的线性表。

1.栈的顺序存储结构

栈的结构定义:

#include<bits/stdc++.h>
#define MAXSIZE 100
using namespace std;
typedef struct{
	int data[MAXSIZE];//栈的大小 
	int top;//用于栈顶指针 
};

进栈push操作:

//插入元素x为新的栈顶元素 
int Push(Sqstack *s,int x)
{
	if(s->top==MAXSIZE-1) //栈满 
	 return 0;
	 s->top++;//栈顶指针加1 
	 s->data[s->top]=x;//放入栈顶 
	 return 1;
}

出栈pop操作:

//默认栈不为空,删除栈顶元素 
int Pop(Sqstack *s,int x)
{
	if(s->top==-1) //栈为空 
	 return 0; 
	x=s->data[s->top];//取出栈顶元素 
	s->top--;//栈顶指针减1 
	 return x;
}

2.栈的链式存储结构

栈的链式结构:

typedef struct Stacknode
{
	int data;
	struct Stacknode *next;
}P;
typedef struct
{
	P* top;
	int count;
}Linkstack;

进栈push操作:

//插入元素x为栈顶元素 
int  push(Linkstack *q,int x)
{
	P *s=(P *)malloc(sizeof(P));
	s->data=x;
	s->next=q->top;//把当前栈顶元素赋值给新结点的直接后继
	q->top=s;//把新的结点赋值给栈顶指针 
	q->count++;
	return 1;
}

出栈pop操作:

//若栈不为空删除栈顶元素,并返回栈顶元素 
int pop(Linkstack *q) 
{
	P* t;int x;
	if(stackempty(*q)) return 0;
	x=q->top->data;
	t=q->top;//将栈顶结点赋值给t 
	q->top=q->top->next;//栈顶指针下移一位,指向后一结点 
	free(t);//释放栈顶结点 
	q->count--;//结点数减1 
	return x;//返回栈顶元素
}

栈的应用-------递归(每个递归定义必须至少有一个条件,满足时递归不再进行)。

2.刷了四个vj上的题,2个没过,2个过了,那两个没过的我觉得没什么问题,运行都是对的一直找不出bug,现在还没过,过了的2个里这是其中一个的题。(2h)

 

AC代码:

#include<stdio.h>
int main()
{
	int n,i,j,m,flag;
	while(scanf("%d",&n)!=EOF)
	{
		int mystack[110];
		int instack[110];
		int top=0,j=0,x=0;
		for(i=0;i<n;i++)
			scanf("%d",&mystack[i]);//输入一个序列 
		for(i=1;i<=n;i++)
		{
			instack[++top]=i;//自然数1~n入栈 
			if(top>x) 
				x=top;
			while(top>0&&instack[top]==mystack[j])
			{
				top--;//把正确入栈的元素按顺序出栈 
				j++;
			}
		}
		if(top==0)//所有元素能正常入栈出栈 
			printf("%d\n",x);
		else
			printf("%d\n",-1);
	}
}

三、晚上

我想写洛谷上的题(搜索),结果一看一个都不会,没学只知道有bds和dfs,但不知道是什么,然后我就盯着啊哈算法看了很久,看的时候好像都懂了,而且这两个算法区别不是很大,主要我在递归这地方转的比较慢,还不太会,所以一个题也没刷,oh no !我试着敲了一个全排列的代码,剩下的还在学(2h)。

#include<stdio.h>
int a[10],book[10],n;
void dfs(int step)
{
	int i;
	if(step==n+1)
	{
		for(i=1;i<=n;i++)
		 printf("%d",a[i]);
		 printf("\n");
		 return ;
	}
	for(i=1;i<=n;i++)
	{
		if(book[i]==0)
		{
			a[step]=i;
			book[i]=1;
			dfs(step+1);//递归调用(难理解) 
			book[i]=0;
		}
	}
	return ;
}
int main()
{
	scanf("%d",&n);
	dfs(1);//从第一个数开始   
	getchar();getchar();
	return 0;
}

总计:8h

明日计划:

学习100个单词,刷一套四级试卷。

学习搜索知识。

刷洛谷和vj

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值