2019年12月第三周

题外话

这周整体状态没有以前那么好了,我自己也认识到了,今年最后这一段时间也要认真才行,不想像高中一样留下悔恨,用陶渊明的一句话来自勉吧:识迷途其未远,觉今是而昨非。

栈与队列

队列与栈一个鲜明的区别就是队列是先进先出,栈是先进后出;形象的来说就是队列是在食堂打饭,而栈是先把东西放到桶里面,再取出东西的过程。

举个回问字符串的例子,判断该字符串是不是回文字符串,“xyxyx”,“abcba”,这样的字符串就是回文字符串。
想想,字符串是回文字符串说明他是一个对称的结构,如果他是奇数长那么中间的·就不需要比较,如果或是偶数长,那么每两两相比较,基于这个思路,我们可以先把字符串的前一半压入栈中,再依次压出栈与后半部分进行比较。
代码如下:

#include<stdio.h>
#include<string.h>
int main()
{
	char a[1001],b[101];
	int i,len,mid,next,top;
	gets(a);
	len(strlen(a);
	mid=len/2-1;
	top=0;
	for(int i=0;i<=mid;++i){
	b[++top]=a[i];
	if(len%2==0)
		next=mid+1;
	else
		next=mid+2;
	for(int i=next;i<=len-1;++i){
		if(a[i]!=b[top])
			break;
		top--;
	}
	if(top)
		printf("y");
	else
		printf("y");
}
	

队列

队列是先进先出的思想,他只允许在队列的首部进行删除操作(出队),在尾部进行插入(入队),如果首位重合了说明该队列中没有元素,即为空队列。
将一组数字第一个数字放入结尾,第二个数字输出,知道所有数字输出,即输入:6 3 1 7 5 8 9 2 4->输出:6 1 5 9 4 7 2 8 3

#include<stdio.h>
struct stu//定义结构体
{
	int data[100];
	int head;//头
	int tail;//尾
}
int main()
{
   int n;
   scanf("%d",&n);
   struct stu q;
   //初始化头与尾
   q.head=1;
   q.tail=1;
   //输入n个数
   for(int i=0;i<=n;++i){
   	scanf("%d",&q.data[q.tail]);
   	q.tail++;//移动数组
   }
   while(q.head<q.tail){//头与尾没有相遇,即不为空循环
   	printf("%d",q.data[q.head]);
   	q.head++;
   	//向队尾添加新数
   	q.tail++;
   	//队首出队
   	q.head++;
   }
}

下阶段在更加熟悉队列与栈的应用

排序

这周我了解了桶排序和快速排序,相对于冒泡排序,桶排序在浪费空间的基础上,节约了时间,而快速排序则继承了两者的优点,既节约了时间又节约了空间。

桶排序

将数组下表作为来代替数字,通过数组出现的次数来表示该数字出现的次数。

//这里规定输入的数都小于1000
#include<stdio.h>
int main()
{
	int n,num,a[1001];
	scnaf("%d",&n);//输入多少个值
	//遍历数组,初始化数组为0;
	for(int i=0;i<n;++i){
		a[i]=0;
	}
/*或者可以:
	int a[1001]={0};
	*/
	//循环输值
	for(int i=0;i<n;++i){
		scanf("%d",,&num);
		a[num]++;//记数字出现的数字
	}
	//循环输出
	for(int i=0;i<1000;++i){//由小往大遍历
		for(int j=0;j<a[i];--j){//数组出现几次输出几次
			printf("%d ",i);
			}
		}
	}

快速排序

快速排序的出现是为了解决之前排序不能兼顾空间与时间的原因,快速排序的核心在于找到一个参考,书上说的是基准数,通过这个基准数将数字分为两个阵营,再继续细分,直到排序结束。
话不多说,先上代码:

#include<stdio.h>
int main()
{
	int n;
	void quicksort(int l,int r);//申明函数
	scanf("%d",&n);
	for(int i=0;i<n;++i)
		scanf("%d",&a[i]);
	quicksort(1,n);//调用函数
	for(int i=0;i<n;++i)
		printf("%d",a[i]);
	}
	void quicksort(int i,int r)
	{
		int i,j,temp;//temp存储参考的基准数
		if(l>r)
			return;
		temp=a[l];
		i=l;
		j=r;
		while(i!=j)
		{
		//先右往左走
			while(a[j]>=temp&&i<j)
				j--;
				//从左往右
			while(a[i]<=temp&&i<j)
				i++;
			if(i<j)
			{
			//没有相遇就交换位置
			t=a[i];
			a[i]=a[j];
			a[j]=t;
			}
		}
		//基数归位
		a[l]=a[i];
		a[i]=temp;
		//递归
		quicksort(l,i-1);//继续处理左边
		quicksort(i+1,r);//继续处理右边
		return;
	}	

快排有些地方还没理解,寒假再冲!!!

文件

这周还看了点文件的有关内容,文件分为文本和二进制文件,两种劣性就像冒泡排序与快排一样各有优劣。
看了文件,感觉自己里完成课设又进了一步…
这周看的文件的输入输出,还要再终端下自己验证,下周再整理…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值