栈的基本操作

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、实验目的与要求:

1.目的

1.掌握栈的抽象数据类型。

2.掌握实现栈的各种操作的算法。

3.理解栈与递归的关系。

2.要求

1.用C描述栈的每种操作在顺序栈或链栈上的实现。

2. 将建栈、初始化栈、判断栈是否非空、求栈的长度、输出从栈顶到栈底的元素分别定义为5个子函数,通过主函数实现对上述子函数的调用。

3. 输入数据:数据域(data)设定为整型。

二、实验方法:(代码)

#include "stdio.h"

#include

#define maxlen 100

typedef struct

{

int data[maxlen];

int top;

}SeqStack;

//初始化空栈

SeqStack *InitStack(SeqStack *S)

{

S->top=-1;

return S;

}

//判断栈空

int StackEmpty(SeqStack *S)

{

if(S->top>=0)

return 0;

else

return 1; //栈空时返回1,不空返回0 }

//入栈

void Push(SeqStack *S,int x)

{

//printf("请输入入栈元素:");

//scanf("%d",&x);

if(S->toptop>=-1)

{

S->top++;

S->data[S->top]=x;

}

else

printf("出错");

}

//出栈

void Pop(SeqStack *S)

{

if(S->top>=0)

S->top--;

else

printf("出错");

}

//取栈顶元素

int GetTop(SeqStack *S)

{

if(S->top<=maxlen-1&&S->top>=0)

return(S->data[S->top]);

else

printf("出错");

}

//输出栈顶元素

void printstack(SeqStack *S)

{

if(S->top<=-1)

return 0;

else

while(S->top>-1)

{

printf("%d ",S->data[S->top]);

S->top--;

}

}

//数制转换问题

void Conversion(SeqStack *S,int n,int d) {

InitStack(S); //初始化空栈

if(n<0) //若n为负数

{

printf("输入的数字必须超过0");

return 0;

}

if(!n)

Push(S,0); //若n为零

while(n) //若n正数

{

Push(S,n%d);

n=n/d;

}

//if(!empty(S))

// pop(S);

}

void main()

{

int x,i,j;

SeqStack *S;

SeqStack P;

S=&P;

InitStack(S);

printf("请输入入栈元素:");

scanf("%d",&x);

while(x!=-1)

{

Push(S,x);

printf("请输入入栈元素:");

scanf("%d",&x);

}

printstack(S);

printf("\n\n");

//进制转换

printf("******进制转换******\n");

printf("请输入十进制i整数转换为对应的j进制数:");

scanf("%d %d",&i,&j);

Conversion(S,i,j);

printstack(S);

printf("\n");

}三、实验分析与小结

1.实验结果

2.小结

在试验中,栈的输入输出我没有用push和pop单纯的做入栈和出栈操作,而是用了一个printstack(红色字迹标注的地方)的输出函数,用一个循环一次性输出。在具体试验中,有很多地方可以用自己的思想实现,不一定就要按照书上的一字不落的打代码,虽

然这个过程很难实验,但是我还是想多学点。

得分(百分制)

相关文档
最新文档