这周整体状态没有以前那么好了,我自己也认识到了,今年最后这一段时间也要认真才行,不想像高中一样留下悔恨,用陶渊明的一句话来自勉吧:识迷途其未远,觉今是而昨非。
队列与栈一个鲜明的区别就是队列是先进先出,栈是先进后出;形象的来说就是队列是在食堂打饭,而栈是先把东西放到桶里面,再取出东西的过程。
举个回问字符串的例子,判断该字符串是不是回文字符串,“xyxyx”,“abcba”,这样的字符串就是回文字符串。
想想,字符串是回文字符串说明他是一个对称的结构,如果他是奇数长那么中间的·就不需要比较,如果或是偶数长,那么每两两相比较,基于这个思路,我们可以先把字符串的前一半压入栈中,再依次压出栈与后半部分进行比较。
代码如下:
#include
#include
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
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
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
int main()
{
int n;
void quicksort(int l,int r);//申明函数
scanf("%d",&n);
for(int i=0;ir)
return;
temp=a[l];
i=l;
j=r;
while(i!=j)
{
//先右往左走
while(a[j]>=temp&&i
快排有些地方还没理解,寒假再冲!!!
这周还看了点文件的有关内容,文件分为文本和二进制文件,两种劣性就像冒泡排序与快排一样各有优劣。
看了文件,感觉自己里完成课设又进了一步…
这周看的文件的输入输出,还要再终端下自己验证,下周再整理…