啊哈算法第二章 队列(一) 先进先出—队 先进后出—栈

版权声明:谢谢 https://blog.csdn.net/Waybyway/article/details/83117775

小哈的QQ号  我的实现方法

#include <stdio.h>
int data1[100];
void cleandata(int data[],int n);
int main(){
    int data1[100]={9,8,7,6,5,4,3,2,1};
    int i=0,j,head=0,tail=8;
    while(head<=tail){
        printf("%d",data1[head]);
        cleandata(data1,tail);
        tail--;
    }
    return 0;
}

void cleandata(int data[],int n){
    int i,temp;
    temp=data[1];
    for(i=0;i<n-1;i++){
        data[i]=data[i+2];
    }
    data[i]=temp;
    return;
}
 

#include <stdio.h>
int data1[100];
void cleandata(int data[],int n);
int main(){
    int data1[100]={9,8,7,6,5,4,3,2,1};
    int i=0,j,head=0,tail=8;
    while(head<=tail){
        printf("%d",data1[head]);
        cleandata(data1,tail);
        tail--;
    }


    return 0;
}

void cleandata(int data[],int n){
    int i,temp;
    temp=data[1];
    for(i=0;i<n-1;i++){
        data[i]=data[i+2];
    }
    data[i]=temp;
    return;
}
#include <stdio.h>
//队遵循  先进先出FIFO原则 first in first out
int main(){
    int q[100]={6,3,1,7,5,8,9,2,4};  //假设已经存好某队
                        // 长度为9 头为0=head,尾为8=tail--;
                        //头指向开始,尾指向空,tail为9代表空
    int head=0,tail=9;
    while(head<tail){   //当首尾没有相遇 即 队中还有元素
        printf("%d ",q[head]);
        head++;
        /*先输出首项  头head++ 到第二个位置
            把第二项放到队伍最后面,尾tail++
            头head++,读到第三个位置,第三个位置成为首项
        */
        q[tail]=q[head];
        tail++;
        head++;
    }
    system("pause");
    return 0;
}
//啊哈算法 第二章 队P29求 小哈的qq号
#include <stdio.h>
#include <string.h>//栈解字符串
/*  栈是 后进先出的原则
    栈由 一个数组data2【】 和 栈顶 top组成
    相当于一个死胡同,先装进来的最后出去,后装进来的先出去
*/
int main(){
    char data1[101],data2[101];//data1 装原来的,data2是判断回文的栈
    int i,len,mid,next,top;
    gets(data1);
    len=strlen(data1);
    mid=len/2-1;//读取 字符串 找到中间位置,将栈顶 top初始为0
    top=0;//top=0 表明栈为空  top!=0栈不为空
    for(i=0;i<=mid;i++){
        data2[++top]=data1[i];
    }
    /*将字符串中点以前装进 栈
    例 原字符串1234567 len=7 mid=2  1 2 3三项前一半装进了栈
               123456  len=6 mid=2  1 2 3三项前一半装进了栈
        由于字符串长度的奇偶性不同,奇: 中点数字不用判断跨过中点
                         偶:中点为空气,需要判断两侧不用跨过中点
    */
    if(len%2==0){
        next=mid+1;
    }else{
        next=mid+2;
    }/*逐项比较
       若有一项不同跳出来,所以top没有回到top=0,
       则不是回文字符串,反之00是
    */
    for(i=next;i<=len-1;i++){
        if(data1[i]!=data2[top]){
            break;
        }
        top--;
    }
    if(top==0){
        printf("YES");
    }else{
        printf("NO");
    }
    system("pause");
    return 0;
}
//啊哈算法 第二章 P35 栈  求解回文字符串

猜你喜欢

转载自blog.csdn.net/Waybyway/article/details/83117775