队列(先进先出)
#include<stdio.h>
struct queue
{
int data[100]; //队列的主体,用来存储内容
int head; //队首
int tail; //队尾
};
int main()
{
struct queue q; //注意struct queue需要整体使用,不能直接写queue q;
int i; //初始化队列
q.head=0;
q.tail=0;
for(i=0;i<9;i++)
{ //依次向队列插入9个数
scanf("%d",&q.data[q.tail]);
q.tail++;
}
while(q.head<q.tail) //当队列不为空的时候执行循环
{
//打印队首并将队首出队
printf("%d",q.data[q.head]);
q.head++;
//先将新队首的数添加到队尾
q.data[q.tail]=q.data[q.head];
q.tail++;
//再将队首出队
q.head++;
}
getchar();getchar();
return 0;
}
栈(后进先出)(回文)
判断是否为回文
#include<stdio.h>
#include<string.h>
int main()
{
char a[101],s[101];
int i,len,mid,next,top;
gets(a); //读入一行字符串
len=strlen(a); //求字符串的长度
mid=len/2-1; //求字符串的中点
top=0; //栈的初始化
//将mid前的字符依次入栈
for(i=0;i<mid;i++)
s[top]=a[i++];
//判断字符串的长度是奇数还是偶数,并找出需要进行字符匹配的起始下标
if(len%2)
next=mid;
else
next=mid+1;
//开始匹配
for(i=next;i<len-1;i++)
{
if(a[i]!=s[top])
break;
top--;
}
//如果top的值位0,则说明栈内所有的字符都被一一匹配了
if(top==0)
printf("YES");
else
printf("NO");
getchar();getchar();
return 0;
}
字符串中最长的回文
#include <iostream>
using namespace std;
int main() {
string s;
getline(cin, s);
int maxvalue = 0, temp;
int len = s.length();
for(int i = 0; i < len; i++) {
temp = 1;
for(int j = 1; j < len; j++) {
if(i - j < 0 || i + j >= len || s[i - j] != s[i + j])
break;
temp += 2;
}
maxvalue = temp > maxvalue ? temp : maxvalue;
temp = 0;
for(int j = 1; j < len; j++) {
if(i - j + 1 < 0 || i + j >= len || s[i - j + 1] != s[i + j])
break;
temp += 2;
}
maxvalue = temp > maxvalue ? temp : maxvalue;
}
cout << maxvalue;
return 0;
}
/*分析:有两种可能,一种是回文字符串的长度为奇数,一种是偶数的情况。i为字符串当前字符的下标。
当回文字串为奇数的时候,j表示i-j与i+j构成的回文字串长度;当回文字串长度为偶数的时候,j表示i+1左边j个字符一直到i右边j个字符的回文字串长度~~~
用maxvalue保存遍历结果得到的最大值并且输出~~*/