题目来自:《数据结构》大连理工大学出版社(2019.8第一版)
链栈上的进栈
代码实现
//链栈上的进栈 void Push(LstackTp* ls, DataType x) //采用头插的方式进行进栈的操作 { LstackTp* p = (LstackTp*)malloc(sizeof(LstackTp)); //创建一个新结点 p->data = x; //将新结点的数据域赋上相应的数据 p->next = ls; //将新结点的指针域指向头结点 ls = p; //最后将新结点作为头结点,进栈操作完成 }
思路图解
链栈上的退栈
代码实现
int Pop(LstackTp* ls, DataType x) //采用头删的方式进行退栈操作 { LstackTp* p; //创建一个临时结点p if (ls != NULL) //判断ls是否为空,不为空才能进行退栈操作 { p = ls; //用结点p来记录ls x = p->data; ls = ls->next; free(p); //释放p return 1; //退栈成功返回1 } else { return 0; //退栈失败返回0 } }
思路图解
链队上的入队列
代码实现
void EnQueue(QueptrTp* lq, DataType x) { LqueueTp* p; p = (LqueueTp*)malloc(sizeof(LqueueTp)); //创建新结点p p->data = x; p->next = NULL; //初始化新结点 (lq->rear)->next = p; //插入尾结点的下一个位置 lq->rear = p; //将新结点设为新的尾结点 }
思路图解