栈和队列的基本操作的实现

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

封面:

安徽大学

网络工程

栈和队列的基本操作的实现

______2010\4\12

【实验目的】

1.理解并掌握栈和队列的逻辑结构和存储结构;

2.理解栈和队列的相关基本运算;

3.编程对相关算法进行验证。

【实验内容】

(一)分别在顺序和链式存储结构上实现栈的以下操作(含初始化,入栈,出栈,取栈顶元素等):

1.构造一个栈S,将构造好的栈输出;

2.在第1步所构造的栈S中将元素e 入栈,并将更新后的栈S输出;

3.在第2步更新后所得到的栈S中将栈顶元素出栈,用变量e返回该元素,并将更新后的栈S输出。(二)分别在链队列和循环队列上实现以下操作(初始化,入队,出队,取队头元素等):

1.构造一个队列Q,将构造好的队列输出;

2.在第1步所构造的队列Q中将元素e入队,并将更新后的队列Q输出;

3.在第2步更新后所得到的队列Q中将队头元素出队,用变量e返回该元素,并将更新后的队列Q输出。

【要求】

1.栈和队列中的元素要从终端输入;

2.具体的输入和输出格式不限;

3.算法要具有较好的健壮性,对运行过程中的错误

操作要做适当处理。

三、实验步骤

1.本实验用到的数据结构

(1)逻辑结构:线性结构

(2)存储结构:程序一、四(顺序存储结构);

程序二、三(链式存储结构);

2.各程序的功能和算法设计思想

程序一:顺序栈

# include

# include

# include

#define STACKINITISIZE 100

# define STACKINCREMENT 10

# define OK 1

# define ERROR 0

# define OVERFLOW -2

typedef int SElemtype;

typedef int status;

typedef struct {

SElemtype *base;

SElemtype *top;

int stacksize;

}sqstack;

void Initstack (sqstack *s) {

(*s).base = (SElemtype *)malloc(STACKINITISIZE * sizeof (SElemtype));

if(!(*s).base) exit(OVERFLOW);

(*s).top = (*s).base;

(*s).stacksize = STACKINITISIZE;

}

void push ( sqstack *s , SElemtype e ){

if ((*s).top - (*s).base >=(*s).stacksize){

(*s).base = (SElemtype *) realloc ((*s).base,((*s).stacksize + STACKINCREMENT) * sizeof (SElemtype ));

if ( ! (*s).base )

exit (OVERFLOW);

(*s).top = (*s).base +(*s).stacksize ;

(*s).stacksize += STACKINCREMENT;

}

*(*s).top ++ = e;

}

status Gettop (sqstack s ) {

int e;

if (s.top ==s.base )

return ERROR;

e=*(s.top-1);

printf ("栈顶元素是%d\n",e);

return OK;

}

status pop ( sqstack *s ) {

int f;

if ( (*s).top==(*s).base) return ERROR;

f = *(--(*s).top);

printf("出栈元素是%d\n",f);

return OK;

}

void stackTraverse(sqstack s ){

SElemtype * p =s.base;

while (s.top>p)

printf ("%d ",*p++);

printf("\n");

}

void main(){

int h,k,e,i;

sqstack la;

printf ("构建一个空栈\n");

Initstack (&la);

printf("请输入栈内元素的个数\n");

scanf ("%d",&k);

printf("请输入%d个元素\n",k);

for (i=0;i

scanf ("%d",&e);

push (&la,e);

}

printf ("\n");

printf("输出栈内所有元素\n");

stackTraverse (la);

fflush (stdin);

printf("查找栈顶元素\n");

Gettop (la);

printf("删除栈顶元素\n");

pop (&la);

printf("输出栈内所有元素\n");

stackTraverse (la);

fflush (stdin);

printf ("\n");

printf ("插入一个元素\n");

printf("请输入插入的元素值\n");

scanf ("%d",&h);

push (&la,h);

printf("输出栈内所有元素\n");

stackTraverse (la);

printf("\n");

}

功能:实现顺序栈的各种功能,如能建立空栈,实现栈的初始化,插入,删除栈顶元素等操作。

算法设计思想:首先建立一个空栈,再实现栈的初始化,用一个主函数包涵栈的各种操作。

程序调式如下:

相关文档
最新文档