首页 > 试题广场 >

栈(stack)是列表家族的另一种数据形式。在栈中进行添加和

[问答题]
栈(stack)是列表家族的另一种数据形式。在栈中进行添加和删除只能在列表的一端进行。项目被描述成“压入”栈顶和“弹出”堆栈。所以,栈是一种LIFO结构,即后进先出(Last In, First Out)。
a. 设计一个栈ADT。
b. 为栈设计一个C编程接口。
推荐
a.
类型名称

类型属性
可存放规则的项目序列
类型操作
把栈初始化为空

确定栈是否为空

确定栈是否已满

向栈顶添加项目(压入一项)

从栈顶删除并恢复项目(弹出一项)
b. 下面以数组的形式实现了栈,但是这些信息只影响结构定义和函数定义的细节,而不影响函数原型描述的接口。
/* stack.h -- 栈类型的接口 */
#include <stdbool.h>
/* 在这里插入项目类型 */
/* 例如:typedef int Item; */
#define MAXSTACKB100
typedef struct stack
{
Item items [MAXSTACK];  /* 存放信息                */
int top;                                /* 第一个空位的索引 */
} Stack;

/* 操作   :初始化栈                                                    */
/* 操作前:ps指向一个栈                                            */
/* 操作后:该栈被初始化为空栈                                 */
void InitializeStack (Stack * ps);

/* 操作   :检查栈是否已满                                         */
/* 操作前:ps指向一个已初始化的栈                          */
/* 操作后:如果该栈已满,返回true;否则返回false    */
bool FullStack (const Stack *ps);

/* 操作   :检查栈是否为空                                         */
/* 操作前:ps指向一个已初始化的栈                          */
/* 操作后:如果该栈为空,返回true;否则返回false    */
bool EmptyStack (const Stack *ps);


/* 操作   :把项目压入栈顶                                         */
/* 操作前:ps指向一个已初始化的栈                          */
/*                 item是要放到栈顶的项目                         */
/* 操作后:如果栈不为空,把item放到栈顶                */
/*                函数返回true;否则,                                 */
/*                不改变栈,函数返回false                         */
bool Push (Item item, Stack * ps);

/* 操作   :从栈顶删除项目                                          */
/* 操作前:ps指向一个已初始化的栈                          */
/* 操作后:如果栈不为空,栈顶的项目                       */
/*              被复制到* pitem,并被从栈顶                       */
/*              删除,函数返回true;如果                            */
/*              这一操作清空了栈,栈被重置为空             */
/*              如果栈开始时就为空,                               */
/*              不改变栈,函数返回false                           */
bool Pop (Item *pitem, Stack * ps);
发表于 2018-03-26 21:21:37 回复(0)