数据结构链栈实现字符匹配算法
来源:互联网 发布:易语言反编译成源码 编辑:程序博客网 时间: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;
}
#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;
}
阅读全文
0 0
- 数据结构链栈实现字符匹配算法
- C/C++数据结构通过顺序栈实现括号()匹配算法
- Kmp字符匹配算法优化C++实现
- 字符匹配KMP算法 java实现
- 利用栈实现字符匹配~~
- kmp字符匹配算法
- 字符模式匹配算法
- 33、字符匹配算法
- KMP算法 字符匹配
- KMP 算法 字符匹配
- 字符匹配kmp算法
- 字符匹配BF算法
- 字符匹配 kmp算法
- 首尾字符匹配算法
- KMS字符匹配算法!
- 字符匹配kmp算法
- 数据结构-使用栈进行括号匹配算法
- 【数据结构】模式匹配算法
- 装最多水的容器-LintCode
- Mac安装MySQL初始密码设置
- mysql sql长度限制解决
- 十六进制字符串与图片互相转换
- 08jQuery源码解析
- 数据结构链栈实现字符匹配算法
- uva 10596 Morning Walk
- stm32 非DMA方式 多路ADC ADC1,ADC3两种方式求助
- 无法启动此程序,因为计算机丢失opencv_core249d.dll
- randomwalking(10.2hu测)
- 设计模式的分类
- 关于对象初探
- 剑指Offer------用两个栈实现队列(用两个队列实现栈)
- 344. Reverse String(第四周)