数据结构栈的基本操作进栈出栈Word格式.docx
- 文档编号:22765640
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:13
- 大小:16.89KB
数据结构栈的基本操作进栈出栈Word格式.docx
《数据结构栈的基本操作进栈出栈Word格式.docx》由会员分享,可在线阅读,更多相关《数据结构栈的基本操作进栈出栈Word格式.docx(13页珍藏版)》请在冰豆网上搜索。
基本操作:
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 基本 操作 进栈出栈