数据结构堆栈实验报告docWord下载.docx

上传人:b****6 文档编号:18816563 上传时间:2023-01-01 格式:DOCX 页数:11 大小:19KB
下载 相关 举报
数据结构堆栈实验报告docWord下载.docx_第1页
第1页 / 共11页
数据结构堆栈实验报告docWord下载.docx_第2页
第2页 / 共11页
数据结构堆栈实验报告docWord下载.docx_第3页
第3页 / 共11页
数据结构堆栈实验报告docWord下载.docx_第4页
第4页 / 共11页
数据结构堆栈实验报告docWord下载.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

数据结构堆栈实验报告docWord下载.docx

《数据结构堆栈实验报告docWord下载.docx》由会员分享,可在线阅读,更多相关《数据结构堆栈实验报告docWord下载.docx(11页珍藏版)》请在冰豆网上搜索。

数据结构堆栈实验报告docWord下载.docx

  /*初始化操作:

*/

  voidStackInitiate(LSNode**head)

  /*初始化带头结点链式堆栈*/

  if((*head=(LSNode*)malloc(sizeof(LSNode)))==NULL)exit

(1);

(*head)->

next=NULL;

  }

  /*判非空操作:

  intStackNotEmpty(LSNode*head)

  /*判堆栈是否非空,非空返回1;

空返回0*/

  if(head->

next==NULL)return0;

  elsereturn1;

  /*入栈操作:

  intStackPush(LSNode*head,DataTypex)

  /*把数据元素x插入链式堆栈head的栈顶作为新的栈顶*/{

  LSNode*p;

  if((p=(LSNode*)malloc(sizeof(LSNode)))==NULL)

  printf("

内存空间不足无法插入!

\n"

);

  return0;

  p->

data=x;

  p->

next=head->

next;

/*新结点链入栈顶*/head->

next=p;

/*新结点成为新的栈顶*/return1;

  /*出栈操作:

  intStackPop(LSNode*head,DataType*d)

  /*出栈并把栈顶元素由参数d带回*/

  LSNode*p=head->

  if(p==NULL)

堆栈已空出错!

"

  head->

next=p->

/*删除原栈顶结点*/

  *d=p->

data;

/*原栈顶结点元素赋予d*/free(p);

/*释放原栈顶结点内存空间*/return1;

  /*取栈顶数据元素操作:

  intStackTop(LSNode*head,DataType*d)

  /*取栈顶元素并把栈顶元素由参数d带回*/

  return1;

  /*撤销*/

  voidDestroy(LSNode*head)

  LSNode*p,*p1;

  p=head;

  while(p!

=NULL)

  p1=p;

  p=p->

  free(p1);

  }

(2)主函数程序:

  #include

  typedefintDataType;

  #include"

LinStack.h"

  voidmain(void)

  {LSNode*myStack;

  inti,x;

  StackInitiate(&

myStack);

  for(i=0;

i  {if(StackPush(myStack,i+1)==0)

error!

\n"

  return;

  if(StackTop(myStack,&

x)==0)

  else

Theelementoflocaltopis:

%d\n"

x);

printf("

Thesequenceofoutingelementsis:

while(StackNotEmpty(myStack))

  StackPop(myStack,&

x);

%d"

x);

  }

  Destroy(myStack);

Thisprogramismadeby\n"

}

  运行结果为:

  (3)设计结构体和测试函数如下:

  typedefstruct{

  chartaskName[10];

  #include"

  voidmain(){

  LSNode*myStack;

  FILE*fp;

  DataTypetask,x;

  if((fp=fopen("

task.txt"

"

r"

))==NULL){

不能打开文件task.txt!

  exit(0);

  while(!

feof(fp)){

  fscanf(fp,"

%s%d"

&

task.taskName,&

task.taskNo);

StackPush(myStack,task);

  fclose(fp);

  while(StackNotEmpty(myStack)){

  StackPop(myStack,&

%s%d\n"

x.taskName,x.taskNo);

Thisprogramismadeby\n"

  }运行结果为:

  3-19

  

(1)

  typedefstruct

  DataTypequeue[MaxQueueSize];

  intfront;

/*队头指针*/

  intcount;

/*计数器*/

  }SeqCQueue;

  /*初始化操作:

QueueInitiate(SeqCQueue*Q)*/

  voidQueueInitiate(SeqCQueue*Q)

  /*初始化顺序循环队列Q*/

  Q->

front=0;

/*定义初始队头指针下标*/Q->

count=0;

/*定义初始计数器值*/

  /*判非空否操作:

QueueNotEmpty(SeqCQueueQ)*/intQueueNotEmpty(SeqCQueueQ)

篇二:

数据结构栈和队列实验报告

  一、实验目的和要求

  

(1)理解栈和队列的特征以及它们之间的差异,知道在何时使用那种数据结构。

  

(2)重点掌握在顺序栈上和链栈上实现栈的基本运算算法,注意栈满和栈空的条件。

  (3)重点掌握在顺序队上和链队上实现队列的基本运算算法,注意循环队队列满和队空的条件。

  (4)灵活运用栈和队列这两种数据结构解决一些综合应用问题。

  二、实验环境和方法

  实验方法:

  

(一)综合运用课本所学的知识,用不同的算法实现在不同的程序功能。

  

(二)结合指导老师的指导,解决程序中的问题,正确解决实际中存在的异常情况,逐步改善功能。

  (三)根据实验内容,编译程序。

  实验环境:

WindowsxpVisualC++6.0

  三、实验内容及过程描述

  实验步骤:

  ①进入VisualC++6.0集成环境。

  ②输入自己编好的程序。

  ③检查一遍已输入的程序是否有错(包括输入时输错的和编程中的错误),如发现有

  错,及时改正。

  ④进行编译和连接。

如果在编译和连接过程中发现错误,频幕上会出现“报错信息”,

  根据提示找到出错位置和原因,加以改正。

再进行编译,如此反复直到不出错为止。

⑤运行程序并分析运行结果是否合理。

在运行是要注意当输入不同的数据时所得结果

  是否正确,应运行多次,分别检查在不同情况下结果是否正确。

编译以下题目的程序并调试运行。

  1)、编写一个程序algo3-1.cpp,实现顺

  的各种基本运算,并在此基础上设计一

  程序并完成如下功能:

  

(1)初始化栈s;

  

(2)判断栈s是否非空;

序栈个主

  (3)依次进栈元素a,b,c,d,e;

  (4)判断栈s是否非空;

  (5)输出出栈序列;

  (6)判断栈s是否非空;

  (7)释放栈。

图3.1Proj3_1工程组成

  本工程Proj3_1的组成结构如图3.1所示。

本工程的模块结构如图3.2所示。

图中方框表示函数,方框中指出函数名,箭头方向表示函数间的调用关系。

  图3.2Proj3_1工程的程序结构图

  其中包含如下函数:

  InitStack(SqStack*&

s)//初始化栈S

  DestroyStack(SqStack*&

s)//销毁栈s

  StackEmpty(SqStack*s)//判断栈空

  Push(SqStack*&

s,ElemTypee)//进栈

  Pop(SqStack*&

s,ElemType&

e)//出栈

  GetTop(SqStack*s,ElemType&

e)//取栈顶元素

  对应的程序如下:

  //文件名:

algo3-1.cpp

  #defineMaxSize100

  typedefcharElemType;

  ElemTypedata[MaxSize];

  inttop;

//栈顶指针

  }SqStack;

  voidInitStack(SqStack*&

  {s=(SqStack*)malloc(sizeof(SqStack));

  s->

top=-1;

//栈顶指针置为-1

  voidDestroyStack(SqStack*&

  free(s);

  boolStackEmpty(SqStack*s)//判断栈空

  return(s->

top==-1);

  boolPush(SqStack*&

  {if(s->

top==MaxSize-1)//栈满的情况,即栈上溢出

  returnfalse;

top++;

//栈顶指针增1

data[s->

top]=e;

//元素e放在栈顶指针处

  returntrue;

  boolPop(SqStack*&

top==-1)//栈为空的情况,即栈下溢出

  e=s->

top];

//取栈顶指针元素的元素

top--;

//栈顶指针减1

  boolGetTop(SqStack*s,ElemType&

  设计exp3-1.cpp程序如下//文件名:

exp3-1.cpp

  ElemTypedata[MaxSize];

  externvoidInitStack(SqStack*&

s);

  externvoidDestroyStack(SqStack*&

  externboolStackEmpty(SqStack*s);

  externboolPush(SqStack*&

s,ElemTypee);

  externboolPop(SqStack*&

e);

  externboolGetTop(SqStack*s,ElemType&

  voidmain()

  ElemTypee;

  SqStack*s;

栈s的基本运算如下:

(1)初始化栈s\n"

  InitStack(s);

(2)栈为%s\n"

(StackEmpty(s)?

空"

:

非空"

));

(3)依次进栈元素a,b,c,d,e\n"

  Push(s,'

a'

b'

c'

d'

e'

(4)栈为%s\n"

(5)出栈序列:

  while(!

StackEmpty(s))

  Pop(s,e);

%c"

e);

(6)栈为%s\n"

(7)释放栈\n"

  DestroyStack(s);

  运行结果如下:

  2)、编写一个程序algo3-2.cpp,实现链栈的各种基本运算,并在此基础上设计一个主程序并完成如下功能:

  

(1)初始化链栈s;

  

(2)判断链栈s是否非空;

  (3)依次进栈a,b,c,d,e;

  (4)判断链栈s是否非空;

  (5)输出链栈长度;

  (6)输出从栈底到栈顶元素;

  (7)输出出队序列;

  (8)判断链栈s是否非空;

图3.3Proj3_2工程组成

  (9)释放队列。

  本工程Proj3_2的组成结构如图3.3所示。

本工程的模块结构如图3.4所示。

  图3.4Proj3_2工程的程序结构图

  InitStack(LiStack*&

s)//初始化栈s

  DestroyStack(LiStack*&

s)//销毁栈

  StackEmpty(LiStack*s)//判断栈是否为空

  Push(LiStack*&

  Pop(LiStack*&

  GetTop(LiStack*s,ElemType&

algo3-2.cpp

  typedefstructlinknode

  ElemTypedata;

//数据域

篇三:

数据结构栈与队列的实验报告

  数据结构栈与队列实验报告

  学院:

数学与计算机学院班级:

计算机科学与技术姓名:

杨理源

  学号:

XX

  实验三栈与队列

  一、实验目的:

  

(1)熟练掌握栈和队列的结构以及这两种数据结构的特点、栈与队列的基本操作。

  

(2)能够在两种存储结构上实现栈的基本运算,特别注意栈满和栈空的判断条件及描述方法;

  (3)熟练掌握链队列和循环队列的基本运算,并特别注意队列满和队列空的判断条件和描述方法;

  (4)掌握栈的应用;

  二、实验要求:

  

(1)给出程序设计的基本思想、原理和算法描述。

  

(2)对源程序给出注释。

  (3)记录程序的运行结果,并结合程序进行分析。

  三、程序设计的基本思想、原理和算法描述:

  四、实验内容:

  1、利用栈的基本操作将一个十进制的正整数转换成R进制数据,并将其转换结果输出。

#include

  #definestack_init_size100

  #definestackincrement10

  typedefstructsqstack{

  int*base;

  int*top;

  intstacksize;

  }sqstack;

  intStackInit(sqstack*s)

  {s->

base=(int*)malloc(stack_init_size*sizeof(int));

  if(!

s->

base)

top=s->

base;

stacksize=stack_init_size;

  intPush(sqstack*s,inte)

  if(s->

top-s->

base>

=s->

stacksize)

base=(int*)realloc(s->

base,(s->

stacksize+stackincrement)*sizeof(int));

if(!

base+s->

stacksize;

stacksize+=stackincrement;

  *(s->

top++)=e;

  returne;

  intPop(sqstack*s,inte)

top==s->

  e=*--s->

top;

  intstackempty(sqstack*s)

  intconversion(sqstack*s)

  {

  intn,e=0,flag=0;

  输入要转化的十进制数:

  \n"

  scanf("

%d"

n);

  printf("

要转化为多少进制:

2进制、8进制、16进制填数字!

scanf("

flag);

将十进制数%d转化为%d进制是:

n,flag);

  while(n)

  Push(s,n%flag);

  n=n/flag;

  while(!

stackempty(s))

  e=Pop(s,e);

  switch(e)

  case10:

printf("

A"

  break;

  case11:

B"

  case12:

C"

  case13:

D"

  case14:

E"

  case15:

F"

  default:

}

  intmain()

  sqstacks;

  StackInit(&

  conversion(&

  2、回文数判断

  #defineMAX50

  #defineFALSE0

  #defineTURE1

  //定义栈

  charelem[MAX];

  }SeqStack;

  //定义循环队列

  charelement[MAX];

  intrear;

  }SeqQuene;

  //初始化栈

  voidInitStack(SeqStack*S){

  S->

top=-1;

//构造一个

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 院校资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1