| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2494 人关注过本帖
标题:求解 数据结构 回文 算法
只看楼主 加入收藏
moridiansha
Rank: 6Rank: 6
来 自:承德
等 级:侠之大者
威 望:4
帖 子:254
专家分:417
注 册:2009-10-21
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:8 
求解 数据结构 回文 算法
怎么判断 一个字符串 是不是回文·
搜索更多相关主题的帖子: 算法 回文 数据结构 求解 
2010-03-31 13:24
地狱无明火
Rank: 2
等 级:论坛游民
帖 子:62
专家分:71
注 册:2009-6-11
收藏
得分:7 
把每个字符存入列和栈做比较
(列是顺序,栈是逆序)
比较 列 和 顺序的栈 每个字符相同,然后返回是与否




2010-03-31 14:08
kspliusa
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:98
专家分:178
注 册:2009-9-27
收藏
得分:6 
bool judge (string const & str_t) {
    int str_len = str_t.size();
    int i = 0, j = str_len-1;
    while (i<=j) {
        if (str_t[i++] != str_t[j--])
            return false;
    }   
    return true;
}
//这个没编译,在txt里写的
2010-03-31 22:25
asdjc
Rank: 6Rank: 6
来 自:武汉
等 级:侠之大者
威 望:7
帖 子:98
专家分:487
注 册:2010-1-22
收藏
得分:7 
再把问题拔高点。
编一个回文数猜想的程序。
输入:一个数字(大于10,小于10000)
输出:可否形成回文数。
形成方式:输入的数与其逆序数相加。和为新的输入。
2010-04-02 10:10
AI恒子
Rank: 2
等 级:论坛游民
帖 子:8
专家分:12
注 册:2010-4-8
收藏
得分:0 
~~   
2010-04-12 21:07
为了学好C
Rank: 1
等 级:新手上路
帖 子:52
专家分:8
注 册:2010-4-3
收藏
得分:0 
#include"stdio.h"
#include"string.h"
int invert(char t[])  
{
    int i,j;
    i=0;           
    j=strlen(t)-1;
    while((i<j)&&t[i]==t[j])
    {
        i++;
        j--;
    }
    if(j<=i)
        return 1;   //如果,j<i,说明存在回文
    else
        return 0;   //否则不存在回文
}
void main()      //主函数
{
    char t[100];
    printf("输入字符串:");
    gets(t);
    if(invert(t))
    printf("该串是回文!\n");
    else
         printf("该串不是回文!\n");
}
2010-04-25 10:43
panny90
该用户已被删除
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2010-04-28 19:10
世界模型
Rank: 4
等 级:业余侠客
威 望:1
帖 子:240
专家分:226
注 册:2010-9-12
收藏
得分:0 
Status Palindrome(char *word);
/* 利用栈和队列判定字符序列word是否是回文 */

可使用栈Stack和队列Queue及其下列操作:
Status InitStack(Stack &S);           
Status Push(Stack &S, ElemType x);   
Status Pop(Stack &S, ElemType &x);   
Status StackEmpty(Stack S);           

Status InitQueue(Queue &Q);
Status EnQueue(Queue &Q, ElemType x);
Status DeQueue(Queue &Q, ElemType &x);
Status QueueEmpty(Queue Q);
Status Palindrome(char *word)
/* 利用栈和队列判定字符序列word是否是回文 */
{
  char a,b,*p;
  Stack S;
  Queue Q;
  InitStack(S);
  InitQueue(Q);
  for(p=word;p&&*p!='@';p++)
  {
    Push(S,*p);EnQueue(Q,*p);
  }
  while(!StackEmpty(S))
  {
    Pop(S,a);
    DeQueue(Q,b);
    if(a!=b) return ERROR;
  }
  return OK;
}

2010-11-25 22:59
逐梦的行星
Rank: 1
来 自:江苏淮安
等 级:新手上路
帖 子:7
专家分:2
注 册:2011-3-30
收藏
得分:0 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef int Status;
typedef int ElemType;
typedef int ElemType;
Status Palindrome(char *word);
typedef struct{
ElemType*base;
ElemType*top;
int stacksize;
}SqStack;
Status InitStack(SqStack&S){
S.base=(ElemType*)malloc(STACK_INIT_SIZE*sizeof(ElemType))
if(!S.base)exit(OVERFLOW);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return(OK);
}
Status Push(SqStack &S, ElemType e){
//插入e为栈顶元素
   if(S.top-S.base==S.stacksize){//栈满则应重新分配空间
     S.base=(ElemType *)
        realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(ElemType));
     if(!S.base)exit(OVERFLOW);
     S.top=(S.base+S.stacksize);//使得S.top重新指向栈顶,因realloc
     S.stacksize+=STACKINCREMENT;
   }
   *S.top++=e;    //top指向待插入位置
   return(OK);
}//Push ,复杂度O(1)
Status Pop(SqStack &S,ElemType &e){
    //若栈不空则栈顶元素出栈并用e带回其值
    if(S.top==S.base)return ERROR;
    e=*(--S.top);     //栈顶元素为*(S.top-1)
     return OK;
} //复杂度O(1)
Status StackEmpty(SqStack S)
        {if(S.top==S.base)return TRUE;else return FALSE;}
int StackLength (SqStack S)
            { return (S.top-S.base); }
Status GetTop(SqStack S,  ElemType &e){
{
        if(S.top==S.base)return ERROR;
        e=*(S.top-1);  //注意top指向待插入位置
        return OK;
}
typedef struct QNode {
    ElemType      data;
    struct QNode  *next;
  } QNode, *QueuePtr;
typedef struct {
  QueuePtr  front;//队头指针
  QueuePtr  rear; //队尾指针
} LinkQueue;// 链队列
 Status InitQueue (LinkQueue &Q) {
   // 构造一个空队列Q
   Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
   if (!Q.front) exit (OVERFLOW);
   Q.front->next = NULL;  //莫忘!!
   return OK;
   }//时间复杂度O(1)
 Status EnQueue (LinkQueue &Q, ElemType e) {
    // 插入元素e为Q的新的队尾元素
     QueuePtr p;
     p=(QueuePtr)malloc(sizeof(QNode));
     if (!p)exit(OVERFLOW);//存储分配失败
     p->data = e;   p->next = NULL;//莫忘!!
     Q.rear->next = p;    Q.rear = p;
     return OK;
  }//复杂度O(1)
 Status DeQueue (LinkQueue &Q, ElemType &e) {
  // 若队列不空,则删除Q的队头元素,用 e 返回其“值”
   if (Q.front ==Q.rear) return ERROR;//空队列
   QueuePtr p= Q.front->next;   e = p->data;
   Q.front->next = p->next;
   if(Q.rear == p) Q.rear = Q.front;//只1个结点时改尾指针
   free (p);
   return OK;
}//复杂度O(1)
 Status DestroyQueue (LinkQueue &Q) {
 //销毁队列Q,此处不同于教材,先清空元素结点,后释放头结点
  QueuePtr p=Q.front->next;
    while(p){//依次释放首元素至最后一个元素
        Q.front->next=p->next;free(p);p=Q.front->next;
    }
    free(Q.front);
    Q.front=NULL;Q.rear=NULL;
    return OK;
}//类此可写置空操作, 复杂度O(n)
Status Palindrome(char *word)
//算法思路:利用栈后进先出和队列先进先出的特点。分别将字符序列存到栈和队列里面。
//分别从栈和队列里面输出字符序列,并经行比较若始终相同,则字符序列word是回文。
//否则不是回文。
{
  char a,b,*p;
  Stack S;
  Queue Q;
  InitStack(S);
  InitQueue(Q);
  for(p=word;p&&*p!='@';p++)
  {
    Push(S,*p);EnQueue(Q,*p);
  }
  while(!StackEmpty(S))
  {
    Pop(S,a);
    DeQueue(Q,b);
    if(a!=b) return ERROR;
  }
  return OK;
}
int main(){


}
//刚刚忙出来,主函数楼主自己写吧。。。
2011-04-12 17:43
快速回复:求解 数据结构 回文 算法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033131 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved