printStack(sPtr); //输出栈中数据,从头指针开始输出 } else {
printf(\栈中没有元素,无法删除\\n\ //如果栈为空时,也就是头指针为空 } break;
default: //如果输入的不正确
printf(\无效输入,请重新输入\\n\ //选择输入不匹配 break; }
instruct(); //输出菜单 菜单循环 scanf(\ //输入选择 } }
void instruct() //菜单 {
printf(\请选择下面的输入:\\n\ \向栈中插入数据:\\n\ \删除栈中的数据:\\n\ \结束操作\\n\}
int isEmpty(stackNodePtr sPtr) //是否为空 {
return sPtr==NULL; }
void printStack(stackNodePtr sPtr) //输出栈 {
if(sPtr==NULL) //当头指针为空时,(判断栈是否为空) {
printf(\空栈\\n\ }
else //不为空时 {
printf(\栈中的数据有:\\n\
while(sPtr!=NULL) //循环条件头指针不为空 {
5
printf(\ //输出头指针指向的数据 sPtr=sPtr->nextPtr; //指向下一个头指针,头指针后移 }
printf(\ //若sPtr 为空 } } //进栈
void push(stackNodePtr *topPtr,int value //进栈 {
stackNodePtr newPtr; //新的头指针
newPtr=malloc(sizeof(stackNodePtr)); //申请空间 if(newPtr!=NULL) //当newPtr为空时循环 {
newPtr->data=value; //把value数据赋值给newPtr指向的data newPtr->nextPtr=*topPtr; //把值赋值给topPtr,再向上移一位 *topPtr=newPtr; } else {
printf(\栈为空\\n\ } } //删除
int pop(stackNodePtr*topPtr) {
stackNodePtr newPtr; //新的头指针 int topValue; //值
if(newPtr!=NULL) //当新的 头指针为空时条件循环 {
newPtr=*topPtr; //头指针赋值给新的头指针 newptr topValue=(*topPtr)->data; //把头指针指向的数据赋值给topValue printf(\删除--- %d\\n\ //输出要删除值 *topPtr=(*topPtr)->nextPtr; //头指针指向下一个位置 free(newPtr); //清空空间 return topValue; } //返回 else {
printf(\栈为空,无法删除数据\\n\ //如果topPtr是有值的 。。。。。。 } }
6
序号 1 2 3 4 项目 实验报告排版(2分) 算法思想分析(3分) 源代码(3分) 实验结果及分析(2分) 得分 总分
7