数据结构,程序急救
提问者:小洋还是孩子 | 浏览 次 | 提问时间:2017-01-19 | 回答数量:4
题目:单链表中有几个字符,设计一个算法,使用栈判断该字符串是否中心对称,如abccba就是中心对称的字符串.我写了一个程序是这样的,老是是调不出来..帮忙看一下..谢谢了...#include <stdio.h>#include <stdlib.h>#include <iostream.h>#define max 100typedef struct node{ char data; struct node *next;}cnode;cnode *create(char s[]){ int i=0; cnode *h,*p,*r; while(s!='\\0') { p=(cnode *)malloc(sizeof(cnode)); p->data=s; p->next=NULL; if(i==0) { h=p; r=h; } else { r->next=p; r=p; } i++; }
已有4条答案
没有很仔细的看,但是我觉得不用使用栈就可以了,分2种情况讨论,一种是字符数为奇数,一种是偶数,就像中间开花那样,从中间下标开始索引向两头遍历就可以了的。
栈的话,也是分奇数和偶数的情况吧,先把一半数据入栈,然后再出栈与剩下半边数据做比较,有不同就不符合题意~
你既然要用栈,为什么找不到你建的栈在哪里?
那个create函数建的是什么?链表?
错误太多了,我写了一个给你参考一下吧。
#define STACK_INIT_SIZE100 //栈的初始空间为100#define STACKINCREMENT10 //每次追加的空间为10#define TRUE 1#define FALSE 0#define ElemType char //定义元素型为字符型。#include <stdlib.h>#include <iostream.h>#define max 100#include <stdio.h>typedef struct{ElemType *base;ElemType *top;int stacksize;}SqStack;/************************************************************************************1.建立一个初始空间为100的栈。************************************************************************************/int Create(SqStack &S) {S.base = (ElemType *)malloc(STACK_INIT_SIZE *sizeof(ElemType)); S.top=S.base;S.stacksize = STACK_INIT_SIZE;return TRUE;}/************************************************************************************2.插入新的栈顶元素。************************************************************************************/int Push(SqStack &S,ElemType e) {/*if(S.top-S.base==S.stacksize) //栈满追加空间。{ S.base = (ElemType *) realloc (S.base,(S.stacksize + STACKINCREMENT)*sizeof(ElemType)); S.top = S.base + S.stacksize; S.stacksize += STACKINCREMENT;}因为你的字符串不会超过100所以这部分可省略。*/*S.top++ = e; //S.top指向的是栈顶元素的上一个空间。return TRUE;}int main(){char a[max],*p,*q;SqStack S;Create(S);cin>>a;for(int i=0;a[i]!='\0';i++) //将字符串输入栈中。 Push(S,a[i]);p = S.base; //P指向栈底元素q = S.top-1; //q指向栈顶元素while(*p == *q) { p++; q--; if(p == q||p == q+1) break;}if(p == q||p == q+1) cout<<a<<"是中心对称。"<<endl;else cout<<a<<"不是中心对称。"<<endl;return 1;//做完之后还要销毁栈,这里我就不写了。}复制代码