第八章十一题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;
 }
}

CSAPP第八章:读书笔记

[1][1]前面讲了异常流的处理。[2][2]进程的概念,fork()一次,返回两次。子进程返回的是0,父进程返回的是子进程的pid。看一个例子:很明显子进程会输出x=2,x=0,而父进程则会输出x=...
  • pp634077956
  • pp634077956
  • 2016年11月08日 14:06
  • 1900

趣味智力十一题

1、有1000桶酒,其中一桶有毒。而一旦吃了,毒性会在一周内发生。现在我们用小老鼠做实验,要在1周内找出那桶毒酒,问最少需要多少老鼠? 【答案】思路 10只老鼠按顺序排好每桶酒按照编号转换成二进制...
  • iOS_MingXing
  • iOS_MingXing
  • 2015年11月27日 15:29
  • 231

python核心编程(第二版)参考答案(自制)--第八章·条件和循环

###最近自学python,使用的教材是python核心编程(第二版)。自己做了练习题的答案,不管正确与否,算是给自己的一种约束和督促吧。 ---------------------------...
  • zflzfl1023
  • zflzfl1023
  • 2014年08月17日 17:00
  • 1274

SQL第八章用SQL操作数据上机题1-7

//修改记录USE MySchool --修改学号为S1201302004学生的住址为“山东省济南市文化路1号院”。 UPDATE Student SET Address='山东省济南市文化路1号院...
  • qq_36074113
  • qq_36074113
  • 2016年11月20日 18:01
  • 622

操作系统概念(第八章) 内存管理(一)

背景内存是现代计算机运行的中心。内存有很大一组字或字节组成,每个字或字节都有它们自己的地址。CPU根据程序计数器(PC)的值从内存中提取指令,这些指令可能会引起进一步对特定内存地址的读取和写入。一个典...
  • u013007900
  • u013007900
  • 2015年12月04日 22:15
  • 1484

龙书第八章理解

//《第一部分》 Device->SetRenderState(D3DRS_STENCILENABLE,    true);     Device->SetRenderState(D3DRS_ST...
  • ckkyjtqlt
  • ckkyjtqlt
  • 2017年05月16日 15:08
  • 179

c++primer plus 第八章习题答案(自己写的)

#include #include //第八章 using namespace std; void showstr(char *str, int n = 0); int main() { char ...
  • chinahnwqf
  • chinahnwqf
  • 2016年05月11日 23:25
  • 622

数据挖掘:概念与技术(第三版)之第八章的学习记录

本章讲解分类的一些基本概念什么是分类 首先我们要知道的是,分类是一种重要的数据分析形式,它提取和刻画重要数据类的模型。这个模型被称之为分类器(classifer)。通过分类器,我们可以预测分类的类标...
  • u014593570
  • u014593570
  • 2017年07月17日 14:48
  • 782

<Python核心编程(第二版)>第八章练习题

1. 条件语句. 请看下边代码:  # statement A  if x > 0:      # statement B      pass  elif x 0:      # stat...
  • qq_20113327
  • qq_20113327
  • 2017年03月10日 18:02
  • 203

《深入理解计算机系统》第八章 (四)信号

信号是软件层面上的异常 (一)Linux信号 可以通过man 7 signal 查看Linux提供的标准信号。其中描述的信号的编号在不同的处理器体系结构的差异有所不同。 (二)信号传送的步骤 传送一个...
  • sanwu2010
  • sanwu2010
  • 2013年12月04日 17:24
  • 556
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:第八章十一题powerby spritsq
举报原因:
原因补充:

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