数据结构(C语言)栈的基本操作 下载本文

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