栈 队列 链表

   队列(先进先出)

#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保存遍历结果得到的最大值并且输出~~*/

猜你喜欢

转载自blog.csdn.net/qq_41668789/article/details/81388079