课 程 实 验 报 告
课程名称:面向对象程序设计
实验名称:面向对象的整型栈编程
院系 : 计算机科学与技术
专业班级:CS1209班
学号 :
姓名 :
指导教师:李春花
1月22日
一、需求分析
题目要求
整型栈是一种先进后出的存储结构,对其进行的操作通常包括判断栈是否为空、向栈顶
添加一个整型元素、出栈等。整型栈类型及其操作函数采用非面向对象的纯C 语言定义,请
将完成上述操作的所有函数采用纯C 语言编程,然后写一个 main 函数对栈的所有操作函数
进行测试。
struct STACK{
int*elems;
始化 p 指向
的栈:最多m 个元素 ");
printf("\t\t 2.用栈 s 初始化 p 指向的栈 \n");
printf("\t 3. 返回 p 指向的栈的实际元素个数pos");
printf("\t 4. 将 e 入栈,并返回p\n");
printf("\t 5. 出栈到 e,并返回p");
printf("\t\t\t 6.赋 s 给 p 指的栈 ,并返回 p\n");
printf("\t 7. 打印 p 指向的栈 ");
printf("\t\t\t 8.销毁 p 指向的栈 \n");
printf("\t\t\t\t 0.退出程序 \n");
printf("\t****************************************************************\n");
}
typedef struct STACK{
int *elems;// 申请内存用于存放集合的元素
int max;// 集合能存放的最大元素个数
int pos;// 集合实际已有元素个数,集合空时pos=0;
} STACK;
void initSTACK(STACK *const p, int m)
{
p->max=m;
sit=m;
p->elems=(int*)malloc(m*sizeof(int));
p->pos=0;
}
void initSTACK(STACK* pset, const STACK&s)
{
initSTACK(pset,;
int i;
if==NULL)
printf("s 栈为空,请初始化
else
for(i=0;i
{
s!! \n");
pset->elems[i]=[i];
pset->pos++;
}
}
inthowMany (const STACK *const p)
{
return (p->pos);
}
STACK *const push(STACK *const p, int e)
{
int m;
if(p->pos==p->max)
{ printf(" 栈已经为满 \n");
printf(" 是否扩展栈
1 为是,
0 为否 \n");
scanf("%d",&m);
if(m==1)
{
p->elems=(int*)realloc(p,(p->pos+1)*sizeof(int));
p->elems[p->pos+1]=e;
p->pos=p->pos+1;
return (p);
}
else
printf(" 插入失败 \n");
}
else
{p->elems[p->pos]=e;
p->pos=p->pos+1;
return (p);
}
}
STACK *const pop(STACK *const p, int &e)
{
int n;
if(p->pos==0)
{
printf(" 栈为空!! ");
}
else
e=p->elems[p->pos-1];
p->pos--;
return (p);
}
STACK *const assign(STACK*const p, const STACK&s)
{
p->elems=;
p->max=;
p->pos=;
return p;
}
void print(STACK*p)
{
int i;
if(p->pos==0)
{
printf(" 栈为空!! \n");
printf(" 最大容量为:\t%d",p->max);
}
else
{
printf(" 最大容量为: \t%d",p->max);
printf("\n当前的数: \n%d\n",p->pos);
printf(" 里面的元素为:\n");
for(i=p->pos-1;i>=0;i--)
{
printf("%d\t",p->elems[i]);
}
}
}
void destroySTACK(STACK*const p)
{
free(p->el