读书人

刚学C请问个栈的有关问题请下

发布时间: 2012-02-14 19:19:19 作者: rapoo

刚学C,请教个栈的问题,请高手指点下
下面这段程序,运行时老报段错误, 请大虾们帮帮忙
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXNUM 1024 // 最大元素数
#define FALSE 0
#define TRUE 1
typedef char Elemtype;

// 栈结构体
typedef struct{
Elemtype stack[MAXNUM];
int top;
} sqstack;

// 初始化栈
int initStack(sqstack *s)
{
if ( ( s=(sqstack *)malloc(sizeof(sqstack)) ) == NULL )
return FALSE;
s-> top = -1;
return TRUE;
}

// 入栈操作
int push(sqstack *s, Elemtype x)
{
if ( s-> top > = (MAXNUM-1) )
{
return FALSE;
}
s-> top++;
s-> stack[s-> top] = x;
return TRUE;
}

// 出栈操作
Elemtype pop(sqstack *s)
{
Elemtype x;
if ( s-> top < 0 )
return FALSE;
x = s-> stack[s-> top];
s-> top--;
return x;
}

// 取栈顶元素
Elemtype getTop(sqstack *s)
{
if ( s-> top < 0 )
return NULL;
return s-> stack[s-> top];
}

// 判断栈是否为空
int Empty(sqstack *s)
{
if (s-> top < 0)
return TRUE;
return FALSE;
}

// 置空操作
void setEmpty(sqstack *s)
{
s-> top = -1;
}
//typedef char Elemtype;
void reverse(char str[100])
{
int len;
len = strlen(str);
int i;
sqstack *s;
initStack(s);
for (i=0; i <len; i++)
{
push(s, str[i]);
}

// 把字符串的顺序倒过来
for (i=0; i <len; i++)
{
str[i] = pop(s);
}
}

int main(void)
{
char str[100];
gets(str);
reverse(str);
printf( "%s\n ", str);
return 0;
}


[解决办法]
sqstack *initStack()
{
sqstack *s = (sqstack *)malloc(sizeof(sqstack));
if(s) s-> top = -1;
return s;
}
...
void reverse(char str[100])
{
...
sqstack *s = initStack();
if(!s) ...
[解决办法]
单步运行程序,
检查你的指针是否都是有效的。

段错误,
多是因为使用了非法的指针引起
[解决办法]
// 初始化栈
sqstack *initStack()
{
sqstack *s = (sqstack *)malloc(sizeof(sqstack));
if (s == NULL)
{
printf( "\a ");
exit(1); // 初始化不成功则无法继续其他操作,直接退出
}
s-> top = -1;
return s;
}

void reverse(char str[100])
{
int len;
len = strlen(str);
int i;
sqstack *s = initStack();
...
------解决方案--------------------


sqstack *s;
initStack(s);
initStack传入的形参,函数内部对s赋值对外面s值无效
[解决办法]
解决了就好,,,结贴吧,,,祝福
[解决办法]
结帖别忘了分...

读书人网 >C++

热点推荐