数据结构栈的基本操作进栈出栈Word格式.docx

上传人:b****7 文档编号:22765640 上传时间:2023-02-05 格式:DOCX 页数:13 大小:16.89KB
下载 相关 举报
数据结构栈的基本操作进栈出栈Word格式.docx_第1页
第1页 / 共13页
数据结构栈的基本操作进栈出栈Word格式.docx_第2页
第2页 / 共13页
数据结构栈的基本操作进栈出栈Word格式.docx_第3页
第3页 / 共13页
数据结构栈的基本操作进栈出栈Word格式.docx_第4页
第4页 / 共13页
数据结构栈的基本操作进栈出栈Word格式.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

数据结构栈的基本操作进栈出栈Word格式.docx

《数据结构栈的基本操作进栈出栈Word格式.docx》由会员分享,可在线阅读,更多相关《数据结构栈的基本操作进栈出栈Word格式.docx(13页珍藏版)》请在冰豆网上搜索。

数据结构栈的基本操作进栈出栈Word格式.docx

基本操作:

InitStack(SqStack&

S)

操作结果:

构造一个空栈

Push(L,e)

操作结果:

插入元素e为新的栈顶元素

StatusPop(SqStack&

删除栈顶元素

}ADTList;

2、链栈可能需要用到有序表的抽象数据类型定义:

LinkStack(SqStack&

StatusPush(L,e)

3、顺序栈程序包含的主要模块:

(1)已给定的函数库:

(2)顺序栈结构体:

(3)顺序栈初始化及创建:

(4)元素插入

(5)元素删除

(6)主程序:

4、链栈程序包含的主要模块:

(2)链栈结构体:

(3)链栈初始化及创建:

三详细设计

线性栈:

结构体(邱建美)

#defineSTACK_INIT_SIZE100//存储空间初始分配量

#defineSTACKINCREMENT10//存储空间分配增量

typedefstruct

{

int*base;

//在构造栈之前和销毁之后,base的值为NULL

int*top;

//栈顶指针

intstacksize;

//当前已分配的存储空间,以元素为单位

}SqStack#include"

Base.h"

主函数(张涛)

#include"

construction.h"

stack_operation.c"

intmain()

SqStackS;

intchoice,e;

S=InitStack();

S=Input_Sq(S);

printf("

请选择执行的操作,输入1执行入栈操作,输入2执行出栈操作choice="

);

scanf("

%d"

&

choice);

switch(choice)

{

case1:

{

printf("

请输入插入元素的值e="

scanf("

e);

S=Push(S,e);

执行入栈操作后的线性栈为"

Print_Stack(S);

};

break;

case2:

{S=Pop(S);

执行出栈操作后的线性栈为"

default:

您输入的值不合法"

}

}

线性栈的创建(郑峰)

SqStackInitStack()//线性栈的创建

S.base=(int*)malloc(STACK_INIT_SIZE*sizeof(int));

//分配存储空间

if(!

S.base)

exit(OVERFLOW);

//存储分配失败

S.top=S.base;

S.stacksize=STACK_INIT_SIZE;

returnS;

输入函数(胡高飞)

SqStackInput_Sq(SqStackS)//输入函数

intn,i;

请输入元素个数n="

n);

请输入%d个元素"

n);

for(i=0;

i<

n;

i++)

scanf("

S.top);

S.top++;

进栈函数(郑峰)

SqStackPush(SqStackS,inte)//进栈函数

if(S.top-S.base>

=S.stacksize)//判断栈是否为满,追加存储空间

S.base=(int*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int));

if(!

exit(OVERFLOW);

S.top=S.base+S.stacksize;

S.stacksize+=STACKINCREMENT;

*S.top++=e;

//插入元素

出栈函数(邱建美)

SqStackPop(SqStackS)//删除函数

inte;

if(S.top==S.base)

printf("

线性栈为空"

e=*--S.top;

输出函数(方傲侠)

voidPrint_Stack(SqStackS)//打印函数

inti;

while(S.base!

=S.top)

for(i=0;

S.top-S.base;

S.top--;

%5d"

*S.top);

}

\n"

库函数

*Base.h(程序名)*/

#include<

string.h>

ctype.h>

malloc.h>

/*malloc()等*/

limits.h>

/*INT_MAX等*/

stdio.h>

/*EOF(=^Z或F6),NULL*/

stdlib.h>

/*atoi()*/

io.h>

/*eof()*/

math.h>

/*floor(),ceil(),abs()*/

process.h>

/*exit()*/

/*函数结果状态代码*/

#defineTRUE1

#defineFALSE0

#defineOK1

#defineERROR0

#defineINFEASIBLE-1

/*#defineOVERFLOW-2因为在math.h中已定义OVERFLOW的值为3,故去掉此行*/

typedefintStatus;

/*Status是函数的类型,其值是函数结果状态代码,如OK等*/

typedefintBoolean;

/*Boolean是布尔类型,其值是TRUE或FALSEl

链栈程序:

typedefstructSNode//建立链表结构体

intdata;

structSNode*next;

}SNode,*LinkStack;

主函数(方傲侠)

LinkStack_operation.c"

LinkStackS;

S=Creatlist_Stack();

执行操作入栈后的线性栈为"

S=Pop(S);

您输入的值不合法\n"

创建链栈函数(张涛)

LinkStackCreatlist_Stack()//创建一个链栈

LinkStackP;

inti,n;

S=(LinkStack)malloc(sizeof(SNode));

S->

next=NULL;

/*先建立一个链栈*/

请输入%d个数据\n"

i=0;

S->

data);

for(i=1;

++i)

P=(LinkStack)malloc(sizeof(SNode));

/*生成新结点*/

P->

next=S;

S=P;

/*输入元素值*/

入栈函数(方傲侠)

LinkStackPush(LinkStackS,inte)

if(S==NULL)

returnERROR;

P=(LinkStack)malloc(sizeof(SNode));

P->

data=e;

S=P;

出栈函数(胡高飞)

LinkStackPop(LinkStackS)

LinkStackP,Q;

P=S;

S=S->

next;

free(P);

输出函数(郑峰)

voidPrint_Stack(LinkStackS)

while(S)

S->

S=S->

四调试分析:

输出函数用了语句S->

next!

=NULL

改正:

语句S!

五用户手册:

看提示内容

六测试结果

1)请输入元素的个数:

4,请输入4个数据1234,请输入执行语句,选择输入1执行入栈操作,选择输入2执行出栈操作choice=1,请输入插入元素的值e=6,执行入栈操作后的线性栈为64321

2)请输入元素的个数:

4,请输入4个数据1234,请输入执行语句,选择输入1执行入栈操作,选择输入2执行出栈操作choice=2,执行出栈操作后的线性栈为321

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

当前位置:首页 > 工程科技 > 环境科学食品科学

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

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