第八章十一题powerby spritsq

原创 2006年05月26日 17:19:00

//
//8_11 判断字符串是否是对称的
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#define MAXSIZE 1024

typedef char datatype;

struct stack
{
 datatype elements[MAXSIZE];
 int top;
};

struct node
{
 char data;
 struct node *next;
};
typedef node linklist;

//创建字符串
linklist *Creat()
{
 linklist *head,*node,*r;
 head = NULL;
 r = NULL;
 char ch;
 printf("请输入一个字符串(以$结束):/n");
 ch = getche();
 printf("/n");
 while(ch != '$')
 {
  node = (linklist *)malloc(sizeof(linklist));
  node->data = ch;
  if(head == NULL)head = node;
  else r->next = node;
  r = node;
  printf("请输入一个字符:/n");
  ch = getche();
  //ch = getchar();
  printf("/n");
 }
 if(r != NULL)
  r->next = NULL;
 return head;
}
//测量字符串长度
int ListLen(linklist *p)
{
 linklist *temp = p;
 int length = 0;
 if(temp == NULL)
 {
  printf("字符串为空!");
 }
 else
 {
  while(temp)
  {
   length++;
   temp = temp->next;
  }
 }
 return (length);
}
void SetNull(struct stack *s)
{
 s->top = -1;
}
int Empty(struct stack *s)
{
 if(s->top >= 0) return (0);
 else return (1);
}
//进栈:将字符串的一半压入栈内
struct stack *Push(struct stack *s,linklist *p)
{
 int len = ListLen(p);
 if(s->top >= MAXSIZE-1)
 {
  printf("stack overflow!");
  return NULL;
 }
 else
 {
  for(int i=0; i<(len/2); i++)
  {
   s->top++;
   s->elements[s->top] = p->data;
   p = p->next;
  }
 }
 return (s);
}

//出栈
datatype Pop(struct stack *s)
{
 datatype temp;
 if(Empty(s))
 {
  printf("Stack underflow!");
  return (-1);
 }
 else
 {
  s->top--;
  temp = s->elements[s->top+1];
  return (temp);
 }
}
//比较字符串
int Compare(struct stack *s,linklist *p)
{
 datatype temp;
 int len, mid,count;
 len = ListLen(p);
 if(len%2 == 0)
 {
  mid = len/2;
 }
 else mid = len/2 +1;

 for(int i=0; i<mid; i++)
 {
  p = p->next;
 }

 count = 0;
 while((!Empty(s))&&p)
 {
  temp = Pop(s);
  if(temp != p->data)
  {
   printf("该字符串不是对称字符串!");
   return (0);
  }
  else
   p = p->next;
   count++;
 }
 if(((len%2 == 0)&&(count == mid))||((len%2 != 0)&&(count == mid-1)))
  return (1);
}

void main()
{
 linklist *strlist;
 stack *str;
 str = (stack *)malloc(sizeof(stack));
 strlist = Creat();
 SetNull(str);

 Push(str,strlist);
 if(Compare(str,strlist))
 {
  while(strlist)
  {
   printf("%c",strlist->data);
   strlist = strlist->next;
  }
  printf("/n该字符串是一对称字符串!");
 }
 //释放资源……
 while(strlist)
 {
  free(strlist);
  strlist = strlist->next;
 }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

《C++ Primer Plus(第六版)》(12)(第八章 函数探幽 编程题答案)

内联函数、左值和右值、模板函数、显式实例、隐式实例、显式具体、后置返回类型、编程题答案... 8.8编程练习 1. void printInfo(char* str, int check = 0) {...

算法概论:第八章NP-完全问题——课后题8.16

在写题目之前,想先总结一下这一章的基本内容。这一章主要讲的是NP, NPC问题。 关于NP问题 P问题,是它能够找到一个在多项式时间内解决的算法;而NP问题不是非P问题,而是可以在多项式时间里验证...

编程珠玑第八章第十题

问题: 在给定的一个数组中,找出lianxu

C++ Primer Plus(第六版) 第八章 第一题

我在网上看了下,很多都是错误的答案,更有甚者,直接说那题目太无厘头了改题目。下面是原题: 编写通常接受一个参数(字符串的地址),并打印该字符串的函数。然而,如果提供了第二个参数(int类型),且该参数...

opencv 对hu不变矩的测试程序cvGetHuMoments,opencv第八章第10题

程序对使用轮廓的hu矩进行测试 如下: #include #include #include #include #include #include #include #inclu...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)