2015-9-29

来源:互联网 发布:电脑淘宝怎么删除评价 编辑:程序博客网 时间:2024/06/06 13:19

今天是周二,上午睡到9点才起,吃了一个香蕉一个苹果(某人晚上专程给买的 ps:nuannuandahentiexin)然后匆忙洗刷过后就上cortex了,中午订了外卖吃的土豆片和豆芽,没午休。吃过饭后写了点代码,是有关于数据结构栈的,下午某人没午休就来送水,说好的是来学习的,结果来到倒头就睡。来到手机还老黑屏,鼓捣了一下她的手机,重新刷的系统,完美。弄好了某人还不满意嫌什么比之前卡了好多,在我看来比我的手机快多了好不好。作为奖励,把她闲置的优盘送给我了,然后又是各种复制压缩备份,在这里不得不吐槽一下腾讯的微云,各种渣不说还有上传空间大小限制,哎,果断放弃,以后备份还是找大百度吧,省心省力上传速度还快。一下午就这样过去了,只写了个栈的小程序还有个尚未完成的链表程序(代码见附件)。调试的时候遇到各种各样的问题,各种崩溃。

                    _____________________________________分割线___________________________________________

就像 bool is_empty(PSTACK); (ps:此行代码为声明函数)
 编译器提示:
--------------------Configuration: stack - Win32 Debug--------------------
Compiling...
stack.c
C:\Users\Administrator\Desktop\stack.c(33) : error C2061: syntax error : identifier 'is_empty'
C:\Users\Administrator\Desktop\stack.c(33) : error C2059: syntax error : ';'
C:\Users\Administrator\Desktop\stack.c(33) : error C2059: syntax error : 'type'
C:\Users\Administrator\Desktop\stack.c(50) : warning C4013: 'delete_s' undefined; assuming extern returning int
C:\Users\Administrator\Desktop\stack.c(92) : warning C4013: 'is_empty' undefined; assuming extern returning int
C:\Users\Administrator\Desktop\stack.c(127) : error C2061: syntax error : identifier 'is_empty'
C:\Users\Administrator\Desktop\stack.c(127) : error C2059: syntax error : ';'
C:\Users\Administrator\Desktop\stack.c(127) : error C2059: syntax error : 'type'
执行 cl.exe 时出错.
stack.obj - 1 error(s), 0 warning(s)

看到这个错误,起先以为是这个编译器不支持bool类型呢,结果自己写了个小程序测试的时候竟然成功的运行了,你没有看错就是成功的运行了,尼玛,这到底是个什么情况啊,现在我还是没搞懂到底哪里出了问题。既然这样不行也只能出绝招了:
 
#define true 1
#define false 0
 int is_empty(PSTACK ps)
{
if(ps->pTop == ps->pBottom)
return true;
else 
return false;
}
完美编译通过

  
                   _____________________________________分割线___________________________________________

在写出栈函数的时候也有点小问题,没有闹明白,这样写的时候是可以正常编译通过的:
============================================== 
elemtype out(PSTACK ps)
{
if(is_empty(ps))
{
printf("delete fail...\n");
exit(-1);
}
else
{
elemtype data  = ps->pTop->data;
PNODE p = ps->pTop;
ps->pTop = ps->pTop->pNext;
free(p);
return data;
}

}
==============================================
但是这样写的时候就是不行:

elemtype out(PSTACK ps)
{
elemtype data;                                       
if(is_empty(ps))
{
printf("delete fail...\n");
exit(-1);
}
else
{
data  = ps->pTop->data;
PNODE p = ps->pTop;//此行为101行
ps->pTop = ps->pTop->pNext;
free(p);
return data;
}
}

编译器是这样说的:
Compiling...
stack.c
C:\Users\Administrator\Desktop\stack.c(101) : error C2275: 'PNODE' : illegal use of this type as an expression
        C:\Users\Administrator\Desktop\stack.c(14) : see declaration of 'PNODE'
C:\Users\Administrator\Desktop\stack.c(101) : error C2146: syntax error : missing ';' before identifier 'p'
C:\Users\Administrator\Desktop\stack.c(101) : error C2065: 'p' : undeclared identifier
C:\Users\Administrator\Desktop\stack.c(101) : warning C4047: '=' : 'int ' differs in levels of indirection from 'struct Node *'
C:\Users\Administrator\Desktop\stack.c(103) : warning C4022: 'free' : pointer mismatch for actual parameter 1
C:\Users\Administrator\Desktop\stack.c(110) : error C2371: 'traverse' : redefinition; different basic types
        C:\Users\Administrator\Desktop\stack.c(36) : see declaration of 'traverse'
执行 cl.exe 时出错.
stack.obj - 1 error(s), 0 warning(s)
                   _____________________________________分割线___________________________________________

尽管出了一些不知名的小错误,最后代码经过修改之后还是成功编译运行了

下面是修改之后能成功编译运行的代码 :

 
                 _____________________________________源代码___________________________________________
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define true 1
#define false 0

typedef int elemtype;

//定义结点
typedef struct Node
{
elemtype data;//数据域
struct Node * pNext;//指针域
}NODE,*PNODE;//NODE等价于struct Node, PNODE等价于struct Node*

//定义栈
typedef struct Stack
{
PNODE pTop;//栈顶指针
PNODE pBottom;//栈底指针
}STACK,*PSTACK;

//声明初始化栈函数
void init(PSTACK);

//声明压栈函数
void push(PSTACK,elemtype);

//声明出栈函数
elemtype out(PSTACK);

//声明栈是否为空
int is_empty(PSTACK);   

//声明遍历栈函数
void traverse(PSTACK);


int main(void)
{
STACK S;//定义了一个栈变量S
elemtype data;//定义了一个elemtype类型的变量data
init(&S);       //初始化栈
push(&S,1);//压栈
push(&S,2);
push(&S,3);
push(&S,4);
traverse(&S);//遍历栈中数据并打印
data = out(&S); //将出栈的结点数据返回并赋值给data
printf("chuzhan data is:%d\n",data);
traverse(&S);
return 0;
}

void init(PSTACK ps)
{
ps->pTop = (PNODE)malloc(sizeof(NODE));   //动态分配sizeof(NODE)大小的内存空间,pTop指针指向这片内存空间的首地址
if((NULL == ps->pTop))  //如果请求分配内存空间失败,则终止该程序
{
printf("init fail....\n");
exit(-1);
}
else{
ps->pBottom = ps->pTop;//栈顶指针指向头结点
ps->pTop->pNext = NULL;//将头结点的指针域置为NULL
}
}


void push(PSTACK ps,elemtype data)
{
PNODE pNew = (PNODE)malloc(sizeof(NODE));
if(NULL == pNew)
{
printf("push fail...\n");
exit(-1);
}
else
{
pNew->data = data;
pNew->pNext = ps->pTop;
ps->pTop = pNew;
}
}


elemtype out(PSTACK ps)
{
if(is_empty(ps))
{
printf("delete fail...\n");
exit(-1);
}
else
{
elemtype data  = ps->pTop->data;
PNODE p = ps->pTop;
ps->pTop = ps->pTop->pNext;
free(p);
return data;
}

}

void traverse(PSTACK ps)
{
if(is_empty(ps))
{
printf("traverse fail...\n");
exit(-1);
}
else
{
PNODE p = ps->pTop;
while(p != ps->pBottom)
{
printf("%d ",p->data);
p = p->pNext;
}
printf("\n");
}
}

int is_empty(PSTACK ps)
{
if(ps->pTop == ps->pBottom)
return true;
else 
return false;
}
                 _____________________________________源代码___________________________________________

0 0