关于C语言的问题,数据结构
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于C语言的问题,数据结构相关的知识,希望对你有一定的参考价值。
#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
typedef struct
int num;
char name[10];
student;
typedef student EType;
typedef bool Status;
typedef struct StackNode
EType data;
StackNode *link;
StackNode;
typedef struct
int length;
StackNode *top;
ChainStack;
ChainStack *S;
ChainStack *CreatStack(ChainStack *S)
//构造一个空栈
S=new ChainStack;
S->top=NULL;
return S;
bool IsEmpty(ChainStack *S)
//判断堆栈是否为空
if(!S->top) return TRUE;
return FALSE;
Status GetTop(ChainStack *S,EType &x)
//返回栈顶的元素
if(IsEmpty(S)) return ERROR;
StackNode *p=S->top;
x=p->data;
return OK;
Status Push(ChainStack *S,EType &x)
//x进S栈,返回进栈后的状态值
StackNode *q=new StackNode;
q->data=x;
q->link=S->top;
S->top=q;
return OK;
Status Pop(ChainStack *S,EType &x)
//将S栈顶的元素取至x中,返回出栈后的状态值
if(IsEmpty(S)) return ERROR;
StackNode *p=S->top;
x=p->data;
S->top=p->link;
delete p;
return OK;
void main()
EType x[5];
int i;
for(i=0;i<5;i++)
cout<<"Input num:";
cin>>x[i].num;
cout<<"Input name:";
cin>>x[i].name;
S=CreatStack(S);
for(i=0;i<5;i++)
Push(S,x[i]);
for(i=0;i<5;i++)
Pop(S,x[i]);
cout<<x[i].num<<x[i].name<<endl;
大家帮忙看看错在哪?
可以把我错的地方指出来吗?我的程序编译时错误是没有的,只是有
--------------------Configuration: 链式堆栈 - Win32 Debug--------------------
Compiling...
Skipping... (no relevant changes detected)
链式堆栈.cpp
尤其是一楼的,你的程序是正确的,可是我的那种写法怎么就不对了呢,老师课件上也是那样写的
链式堆栈.obj - 0 error(s), 0 warning(s)
我不知道我错在哪?
注意区分链栈和结点,发现在使用的时候出现问题,
还有有个最明显的是空函数的判断有点问题吧
以下仅供参考
#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
typedef struct student
int num;
char name[10];
Student;
typedef Student EType;
typedef bool Status;
typedef struct node
EType data;
node *link;
Node;
typedef struct snode
Node *bottom;
Node *top;
Snode;
Snode *CreatStack(Snode *S)
//构造一个空栈
S->top=(Node *)malloc(sizeof(Node));
S->top->link=NULL;
S->bottom=NULL;
return S;
Status IsEmpty(Snode *S)
//判断堆栈是否为空
if(!(S->top)) return TRUE;
else return FALSE;
EType GetTop(Snode *S,EType &x)
//返回栈顶的元素
if(!IsEmpty(S))
Node *p=S->top;
x=p->data;
return x;
void Push(Snode *S,EType &x)
//x进S栈,返回进栈后的状态值
Node *q=(Node *)malloc(sizeof(Node));
q->data=x;
q->link=S->top->link;
S->top->link=q;
EType Pop(Snode *S,EType &x)
//将S栈顶的元素取至x中,返回出栈后的状态值
if(!IsEmpty(S))
Node *p=S->top->link;
x=p->data;
S->top->link=p->link;
delete p;
return x;
void main()
EType x[5];
int i;
Snode *S;
for(i=0;i<5;i++)
cout<<"Input num:";
cin>>x[i].num;
cout<<"Input name:";
cin>>x[i].name;
S=CreatStack(S);
for(i=0;i<5;i++)
Push(S,x[i]);
for(i=0;i<5;i++)
Pop(S,x[i]);
cout<<x[i].num<<x[i].name<<endl;
参考技术B 你在使用c++,但是使用了非标准的C++头文件iostream.h
你的代码在大部分老的C++编译器及其头文件下没问题。
可能是使用VC++2005,这个版本没有iostream.h这个头文件,所以出错,你可以改成下面的样子
#include <iostream>
using namespace std;
编译通过 参考技术C 没什么问题,就是没有用use std,编译的时候,可能cin和cout无法识别
对补充的回答
没有错误啊,那个是说当你的代码没有修改而已。重编一下就可以了
不用去管它 参考技术D 帮你简单的修改了一下
#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
typedef struct
int num;
char name[10];
student;
typedef student EType;
typedef bool Status;
typedef struct StackNode
EType data;
StackNode *link;
StackNode;
typedef struct
int length;
StackNode *top;
ChainStack;
ChainStack *CreatStack()
//构造一个空栈
ChainStack* S=new ChainStack();
S->top=NULL;
return S;
bool IsEmpty(ChainStack *S)
//判断堆栈是否为空
if(!S->top) return TRUE;
return FALSE;
Status GetTop(ChainStack *S,EType &x)
//返回栈顶的元素
if(IsEmpty(S)) return ERROR;
StackNode *p=S->top;
x=p->data;
return OK;
Status Push(ChainStack *S,EType &x)
//x进S栈,返回进栈后的状态值
StackNode *q=new StackNode;
q->data=x;
q->link=S->top;
S->top=q;
return OK;
Status Pop(ChainStack *S,EType &x)
//将S栈顶的元素取至x中,返回出栈后的状态值
if(IsEmpty(S)) return ERROR;
StackNode *p=S->top;
x=p->data;
S->top=p->link;
delete p;
return OK;
void main()
EType x[5];
int i;
for(i=0;i<5;i++)
cout<<"Input num:";
cin>>x[i].num;
cout<<"Input name:";
cin>>x[i].name;
ChainStack* S=CreatStack();
for(i=0;i<5;i++)
Push(S,x[i]);
for(i=0;i<5;i++)
Pop(S,x[i]);
cout<<x[i].num<<x[i].name<<endl;
本回答被提问者采纳 第5个回答 2007-10-28 不知到你所说的错是指什么,但是在VC 6.0 中运行正确,没有问题, 只是你定义的 int length 没派上用场.
以上是关于关于C语言的问题,数据结构的主要内容,如果未能解决你的问题,请参考以下文章