啊哈演算法第二章 佇列(一) 先進先出—隊 先進後出—棧
阿新 • • 發佈:2018-11-09
小哈的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 棧 求解迴文字串