关于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)
我不知道我错在哪?

参考技术A 顺便给你修改了一下,你的方法不是很好~
注意区分链栈和结点,发现在使用的时候出现问题,
还有有个最明显的是空函数的判断有点问题吧
以下仅供参考
#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语言的问题,数据结构的主要内容,如果未能解决你的问题,请参考以下文章

关于c语言结构体变量成员引用的问题

关于c语言结构体变量成员引用的问题

C语言关于结构体定义的问题

C语言里,关于数据类型的大小问题

关于C语言中函数修改结构体的值的问题

关于C语言结构体指针做函数形参的问题