一个关于堆栈保存括号出错的问题?

lirg8405 2009-07-18 05:59:37
我有一个堆栈:
typedef struct Stack
{
String data;
struct Stack *next;
}Stack_Conversion;

//初始化带头结点的堆栈
bool __fastcall StackInitiate(Stack_Conversion **head)
{
if ((*head = (Stack_Conversion*)malloc(sizeof(Stack_Conversion))) == NULL)
{
return false;
}
(*head)->next = NULL;
return true;
}

//入栈
bool __fastcall StackPush(Stack_Conversion *head, String x)
{
Stack_Conversion *p;

if ((p = (Stack_Conversion *)malloc(sizeof(Stack_Conversion))) == NULL)
{
return false;
}
p->data = x;
p->next = head->next;
head->next = p;
return true;
}
//------------------------------------下面是出错调用
当调用 StackPush(S,"]"); StackPush(S,"("); 等括号时会出错Invalid point operation
但是StackPush(S,"aa");这样不会出错,可以正确运行,是什么原因呢?
...全文
95 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lirg8405 2009-07-21
  • 打赏
  • 举报
回复
还是没懂为什么,不过我不用字符串的了,直接使用字符操作,反正一样,结贴了
fairchild811 2009-07-19
  • 打赏
  • 举报
回复
使用head之前,Stack **head 需要先 Stack **head = new Stack*; // malloc不清楚,C不怎么会。

head定义为一级指针就可以了吧,和p类型一样,然后封装成结构体,或者类就可以了

http://blog.csdn.net/xmr_gxcfe/archive/2007/08/28/1761419.aspx
ooip1919 2009-07-19
  • 打赏
  • 举报
回复
给个程序给你参考:
 
#include <stdio.h>
#include <stdlib.h>

#define MAX 100//堆栈的最大容量

typedef struct
{
int data[MAX];//堆栈空间
int top;//栈顶指示器
}SqStack;
// 动态分配堆栈SqStack空间
// 入参:无
// 返回值:堆栈结构体指针
SqStack * InitStack()
{
SqStack * s;
s=(SqStack *)malloc (sizeof(SqStack));//动态分配堆栈空间
s->top=-1;//初始化栈顶指示器
return s;
}
// 将e入栈
// 入参:s堆栈结构体指针
// 返回值:堆栈对象的结构体指针
int Push(SqStack *s,int e)
{
if(s->top==MAX-1)//判断堆栈是否满
{
printf("栈满数据溢出!");
return 0;
}
s->top++;//移动栈顶指示器
s->data[s->top]=e;//数据入栈
//这里有Bug补充: return 1 ;
}
// 打印堆栈内的所有数据
// 入参:s堆栈结构体指针
// 返回值:无
void output(SqStack *s)
{
int i;
for(i=s->top;i>=0;i--)//打印从栈顶向栈尾的数据
printf("%d", s->data[i]);
printf("\n");//换行
}



void main()
{
SqStack *s;
int n,e;
printf("请输入一个正整数:");
scanf("%d",&n);//从键盘输入一个整数n
s=InitStack();//初始化堆栈
while(n>0)//将整数n的二进制码打印出来
{
e=n%2;//取整数n的最后一位
Push(s,e);//整数n的最后一位入栈
n=(n-e)/2;//整数n右移一位
}
output(s);//打印整数n的二进制码
}
ooip1919 2009-07-19
  • 打赏
  • 举报
回复

//入栈
void __fastcall StackPush(Stack_Conversion **head, String x)
{
Stack_Conversion *p;
p = (Stack_Conversion *)malloc(sizeof(Stack_Conversion));
p->data = x;
p->next = *head;
*head = p;
// return true;
}

//出
bool __fastcall Stackpop(String *cp,Stack_Conversion **head)
{
Stack_Conversion *p=*head;
if (*head==NULL) return false;
*cp=p->data;
*head=p->next ;
free(p);
return true;
}


试一试,我现在没环境测试
hxfjb 2009-07-18
  • 打赏
  • 举报
回复
head的初始化不对
bool __fastcall StackInitiate(Stack_Conversion **head)
{
if ((*head = (Stack_Conversion*)malloc(sizeof(Stack_Conversion))) == NULL)
{
return false;
}
(*head)->next = NULL;
return true;
}
上面函数必须是head=()malloc()

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧