1. 程式人生 > >啊哈演算法第二章 佇列(一) 先進先出—隊 先進後出—棧

啊哈演算法第二章 佇列(一) 先進先出—隊 先進後出—棧

小哈的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 棧  求解迴文字串