鱼C论坛

 找回密码
 立即注册
查看: 3656|回复: 5

[已解决]我这么写的几个链栈基本操作函数,无法获取top->next??

[复制链接]
发表于 2018-4-29 22:58:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef char DataType; 
typedef struct node
{
        DataType data;
        struct node *next;
}linkstack,*link;
int init(link top)
{
        if(!top)
        {
                printf("申请内存失败!\n");
                return -1;
        }
        top->data='1';
        top->next=NULL;
        return 0;
}
int empty(link top)
{
        if(top->next==NULL)
        return 1;
        else return 0;
}
int push(link top,DataType e)
{
        link p=(link)malloc(sizeof(linkstack));
        if(!p)
        {
                printf("申请空间失败!\n");return -1;
        }
        p->data=e;
        p->next=top->next;
        top->next=p;
        return 0;
}
int gettop(link top,DataType *e)
{
        link p;//
        if(empty(top))
        {
                printf("栈是空的!\n");
                return -1;
        }
        p=top->next;
        *e=p->data;
        return 0;
}
int pop(link top,DataType *e)
{
        if(empty(top))
        {
                printf("栈是空的!\n");
                return -1;
        }
        link p;
        p=top->next;
        *e=p->data;
        top->next=p->next;
        free(p);
        return 0;
}
int destroy(link top)
{
        if(!top)
        {
                printf("栈是空的!\n");
                return -1;
        }
        link p,q;
        p=top;
        while(!p)
        {
                q=p;
                p=p->next;
                free(q);
        }
        return 0;
}
int match(DataType a,DataType b)
{
        if(a=='('&&b==')')
        return 1;
        else if(a=='['&&b==']')
        return 1;
        else if(a=='{'&&b=='}')
        return 1;
        else
        return 0;
}
int main()
{
        char s[60];
        printf("请输入表达式:");
        gets(s);
        char *pp=s;char *q;
        link top=(link)malloc(sizeof(linkstack));
        init(top);
        while(*pp)
        {
                switch(*pp)
                {
                        case'(':
                        case'[':
                        case'{':push(top,*pp);break;
                        case')':
                        case']':
                        case'}':if(empty(top)) {
                                printf("括号不匹配!\n");return -1;
                        }
                        gettop(top,q);
                        if(match(*q,*pp)) pop(top,q);
                        else 
                        {
                        printf("括号不匹配!\n");
                        return -1;
                        }break;
            }
            pp++;
        }
        if(empty(top)) printf("括号匹配!\n");
        return 0;
}
本来是个简单的判断表达式括号是否匹配的程序,但是一运行就出错,调试发现是在扫描到右括号的时候用gettop函数,发现top->next被认为是NULL?我明明前面有push操作啊?是不是我的gettop函数写的有问题?求各位大神解答,感激不尽!
最佳答案
2018-4-30 19:36:56
我贼直! 发表于 2018-4-30 19:08
我之前的char *q,不也是个指针吗?和换成char q,取&q有什么区别呢?

指针是一个变量,一个保存地址的变量
char a = '\n';
char *q = &a;     // q是一个变量,这个变量中保存了一个地址,保存了变量a的地址


char q;     // q是一个变量,这个变量中保存一个字符,&q 得到变量q的地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-4-30 00:50:54 | 显示全部楼层
无标题.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-30 08:57:35 | 显示全部楼层

我前面有char *q呀,不过我刚刚把q指针变量改成了字符变量,函数参数里面用到q的改成&q,为啥运行就没问题了呢?请指教
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-30 11:57:35 | 显示全部楼层
我贼直! 发表于 2018-4-30 08:57
我前面有char *q呀,不过我刚刚把q指针变量改成了字符变量,函数参数里面用到q的改成&q,为啥运行就没问 ...

指针就是这样用的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-30 19:08:52 | 显示全部楼层
人造人 发表于 2018-4-30 11:57
指针就是这样用的

我之前的char *q,不也是个指针吗?和换成char q,取&q有什么区别呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-30 19:36:56 | 显示全部楼层    本楼为最佳答案   
我贼直! 发表于 2018-4-30 19:08
我之前的char *q,不也是个指针吗?和换成char q,取&q有什么区别呢?

指针是一个变量,一个保存地址的变量
char a = '\n';
char *q = &a;     // q是一个变量,这个变量中保存了一个地址,保存了变量a的地址


char q;     // q是一个变量,这个变量中保存一个字符,&q 得到变量q的地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 21:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表