数据结构链栈实现字符匹配算法

来源:互联网 发布:易语言反编译成源码 编辑:程序博客网 时间:2024/05/16 06:33
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#define OK 1
#define ERROR -1
typedef char ElemType;
typedef int Status;
typedef struct stack//创建链栈
{
    ElemType data;//数据域
    struct stack* next;//指针域 存储下一节点地址
}StackNode,*LinkStack;


Status InitStack(LinkStack &S);//初始化栈
Status Push(LinkStack &S,ElemType e);//将元素e压入栈S
Status Pop(LinkStack &S,ElemType &e);//将元素e压出栈s




int main()
{
    LinkStack S = new stack;
    InitStack(S);
    int length;
    ElemType e;
    printf("请输入你要存储的字符数:");
    scanf("%d",&length);
    printf("请输入你要存储的字符:");
    for(int i = 0;i<length;i++)
    {
        printf("\n");
        e = getch();//隐试输入
        printf("%c",e);
        Push(S,e);
    }
    ElemType elem[100];


    if((length%2)==0)//若长度为偶数则出栈一半长度个元素
    {
        for(int i = 0 ;i<length/2;i++)
    {
        Pop(S,elem[i]);


    }
    }
    else
    {
        for(int i = 0;i<=length/2;i++)//若长度为奇数,则出栈一半长度加1个元素,把中间元素一起出栈
        {
            Pop(S,elem[i]);
        }
    }
    ElemType elemTemp[100];
    bool flag = true;
    //将剩下的所有元素并一一比较,若有不匹配则直接返回flag为false并退出循环
    for(int i = length/2-1;i>=0;i--)
    {
        Pop(S,elemTemp[i]);
        if(elemTemp[i]!=elem[i])
        {
            flag=false;
            break;
        }
    }
    if(flag)
    {
        printf("该字符串是中心对称关系");
    }else{
    printf("该字符串不是中心对称关系");
    }


    return 0;
}
Status InitStack(LinkStack &S)//初始化栈
{
    S = NULL;//构造一个空栈 栈顶指针置空
    return OK;
}
Status Push(LinkStack &S,ElemType e)//将元素e压入栈S
{
    LinkStack p = new stack;//生成新结点,申请空间
    p->data = e;//将e值存入结点p
    p->next = S;//将新节点放入栈顶
    S = p;//将p改成栈顶元素
    return OK;
}
Status Pop(LinkStack &S,ElemType &e)//将元素e压出栈s
{
    if(S == NULL) return ERROR;//判断栈是否为空,若空则返回ERROR
    LinkStack p = S;//创建p结点以释放多余空间
    e = S->data;//将栈顶元素赋值给e
    S = S->next;//将S栈顶指针移动到S下一位处为栈顶
    delete p;//将p空间释放
    return OK;
}
原创粉丝点击