华中科技大学计算机学院C++实验报告-实验一
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程实验报告
课程名称:面向对象程序设计
实验名称:面向对象的整型栈编程
院系:计算机科学与技术
专业班级:CS1209班
学号:
姓名:
****:***
2014 年 1 月22 日
一、需求分析
1.题目要求
整型栈是一种先进后出的存储结构,对其进行的操作通常包括判断栈是否为空、向栈顶添加一个整型元素、出栈等。整型栈类型及其操作函数采用非面向对象的纯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栈为空,请初始化s!!\n");
else
for(i=0;i<;i++)
{
pset->elems[i]=[i];
pset->pos++;
}
}
int howMany (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->elems);
p->max=0;
p->pos=0;
if(p->max==0)
printf("摧毁栈成功!");
else
printf("摧毁栈未成功\npos=%d!!",p->pos); }
int main()
{
int a[5]={1,2,3,4,5};
STACK *pset=new STACK;
STACK s={a,5,5};
int op;
int e,m=0;
int i;
char b;
int t;
int e1;
do
{ system("cls");
menu();
printf("请输入序号:");
scanf("%d",&op);
switch(op)
{
case 1:printf(" ");