| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 495 人关注过本帖
标题:菜鸟跪求高手相救!在线等!
只看楼主 加入收藏
yhyhgrrrr
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2005-11-21
收藏
 问题点数:0 回复次数:2 
菜鸟跪求高手相救!在线等!

题目:
设单链表中存放n个字符,试编制一个程序,使用栈
判断该字符串是否中心对称,如xyzzyx为中心对称
字符串.
提示:先使用create()函数从用户输入的字符串创
建相应的单链表,然后调用judge()函数判断是否为中
心对称字符串.在judge()中先将字符串进栈,然后将栈
中的字符逐个与单链表中的字符进行比较.


程序为:#include"stdio.h"
#include"stdlib.h"
#define LIST_INIT_SIZE 10
#define LISTINCREMENT 10
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef char ElemType;
typedef char SElemType;
typedef int Status;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
typedef struct SqStack{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;

Status GetElem_L(LinkList L,int i,ElemType &e){
int j;
LinkList p;
p=L->next; j=1;
while(p&&j<i){
p=p->next; ++j;
}
if(!p||j>i) return ERROR;
e=p->data;
return OK;
}

Status CreateList_L(LinkList &L){
LinkList p;
int i,n;
printf("请输入字符串的个数:");
scanf("%d",&n);
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
for(i=n;i>0;--i){
p=(LinkList)malloc(sizeof(LNode));
printf("输入第""%d""个字符:",i);
scanf("%s",&p->data);
printf("\n");
p->next=L->next; L->next=p;
}
return OK;
}

int ListLength_L(LinkList L){
int i=0;
LinkList p;
p=L->next;
while(p!=NULL) {p=p->next; i++;}
return i;
}

Status InitStack(SqStack &S){
S.base=(SElemType*)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,SElemType 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.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return OK;
}

Status Pop(SqStack&S,SElemType&e){
if(S.top==S.base)return ERROR;
e=*--S.top;
return OK;
}

Status judge(int n){
int m=n,i;
char e,d;
LinkList head;
SqStack S;
for(i=1;i<=m;++i){
GetElem_L(head,i,e);
Push(S,e);
}
for(i=1;i<=m;++i){
GetElem_L(head,i,e);
Pop(S,d);
if(e!=d){
printf("%s""输入的字符串不中心对称");
break;
}
if(i==m-1&&e==d) printf("%s""输入的字符串中心对称");
}
return OK;
}


void main(){
int n;
LinkList L;
SqStack C;
InitStack(C);
CreateList_L(L);
n=ListLength_L(L);
judge(n);
}



调试时没有错误和警告但有“遇到问题需要关闭”的画面出现,经测试不是VC软件的问题,希望大家帮帮忙,解决这个问题!

搜索更多相关主题的帖子: 相救 在线 
2005-11-21 00:21
踏魔狼
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:1322
专家分:33
注 册:2005-9-22
收藏
得分:0 

我在你这个程序中编了一个显示链表数据的函数.发现你的这个链表在头部少了一节,这是大问题.
还有没有其它问题我就没有多作分析了.
#include"stdio.h"
#include"stdlib.h"
#define LIST_INIT_SIZE 10
#define LISTINCREMENT 10
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef char ElemType;
typedef char SElemType;
typedef int Status;

typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;

typedef struct SqStack
{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
void printList(LNode *list)
{
LNode *node =list;
while(node !=NULL)
{
printf("%c",node->data);
node=node->next;
}
}
Status GetElem_L(LinkList L,int i,ElemType &e)
{
int j;
LinkList p;
p=L->next; j=1;
while(p&&j<i)
{
p=p->next; ++j;
}
if(!p||j>i) return ERROR;
e=p->data;
return OK;
}

Status CreateList_L(LinkList &L)
{
LinkList p;
int i,n;
printf("请输入字符串的个数:");
scanf("%d",&n);
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
for(i=n;i>0;--i)
{
p=(LinkList)malloc(sizeof(LNode));
printf("输入第""%d""个字符:",i);
scanf("%s",&p->data);
printf("\n");
p->next=L->next; L->next=p;
}
printList(L);
return OK;
}

int ListLength_L(LinkList L){
int i=0;
LinkList p;
p=L->next;
while(p!=NULL) {p=p->next; i++;}
return i;
}

Status InitStack(SqStack &S)
{
S.base=(SElemType*)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,SElemType 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.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return OK;
}

Status Pop(SqStack&S,SElemType&e){
if(S.top==S.base)return ERROR;
e=*--S.top;
return OK;
}

Status judge(int n){
int m=n,i;
char e,d;
LinkList head;
SqStack S;
for(i=1;i<=m;++i){
GetElem_L(head,i,e);
Push(S,e);
}
for(i=1;i<=m;++i){
GetElem_L(head,i,e);
Pop(S,d);
if(e!=d){
printf("%s""输入的字符串不中心对称");
break;
}
if(i==m-1&&e==d) printf("%s""输入的字符串中心对称");
}
return OK;
}


void main()
{
int n;
LinkList L;
SqStack C;
InitStack(C);
CreateList_L(L);
n=ListLength_L(L);
judge(n);
}


=×&D o I p R e E n C g T l X&×=
2005-11-21 10:02
yhyhgrrrr
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2005-11-21
收藏
得分:0 

万分感谢!我知道改怎么改了!

2005-11-21 10:59
快速回复:菜鸟跪求高手相救!在线等!
数据加载中...
 
   



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

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