要求编写功能函数实现堆栈的定义,基于链栈:按用户要求输入元素,编写进栈函数push();编写出栈函数pop();编写判断栈满和栈空的函数 ;遍历栈,并输出元素;输入数据实现十进制到二进制的转换。c语言实现完整代码,并给出算法流程
时间: 2024-05-09 21:20:50 浏览: 48
先定义堆栈的几个基本操作,再设计一主函数利用堆的操作完成以下功能
算法流程:
1. 定义链栈结构体Node和栈指针top。
2. 编写进栈函数push(),首先判断栈是否已满,若是则输出提示信息;若否,则新建一个节点,将元素值存入节点,并将该节点插入栈顶。
3. 编写出栈函数pop(),首先判断栈是否为空,若是则输出提示信息;若否,则取出栈顶元素并将该节点释放。
4. 编写判断栈满和栈空的函数,判断方法分别为链栈长度是否达到最大值和链栈长度是否为0。
5. 遍历栈,并输出元素,从栈顶开始遍历链表,输出节点的元素值。
6. 输入数据实现十进制到二进制的转换,将十进制数不断除以2,将余数入栈,直到商为0,再从栈顶开始输出余数,即可得到二进制数。
完整代码如下:
```
#include <stdio.h>
#include <stdlib.h>
#define MaxSize 100 //链栈最大长度
typedef struct Node {
int data; //元素值
struct Node *next; //指向下一个节点的指针
}Node, *LinkStackPtr;
typedef struct {
LinkStackPtr top; //栈顶指针
int count; //当前栈中元素个数
}LinkStack;
//初始化栈
void InitStack(LinkStack *S) {
S->top = NULL;
S->count = 0;
}
//判断栈是否为空
int StackEmpty(LinkStack *S) {
return S->count == 0;
}
//判断栈是否已满
int StackFull(LinkStack *S) {
return S->count == MaxSize;
}
//进栈
int Push(LinkStack *S, int data) {
if (StackFull(S)) {
printf("Stack is full.\n");
return 0;
}
LinkStackPtr p = (LinkStackPtr)malloc(sizeof(Node));
p->data = data;
p->next = S->top;
S->top = p;
S->count++;
return 1;
}
//出栈
int Pop(LinkStack *S, int *data) {
if (StackEmpty(S)) {
printf("Stack is empty.\n");
return 0;
}
LinkStackPtr p = S->top;
*data = p->data;
S->top = p->next;
free(p);
S->count--;
return 1;
}
//遍历栈
void TraverseStack(LinkStack *S) {
if (StackEmpty(S)) {
printf("Stack is empty.\n");
return;
}
LinkStackPtr p = S->top;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
//十进制转二进制
void DecimalToBinary(int n) {
LinkStack S;
InitStack(&S);
while (n) {
Push(&S, n % 2);
n /= 2;
}
while (!StackEmpty(&S)) {
int data;
Pop(&S, &data);
printf("%d", data);
}
printf("\n");
}
int main() {
LinkStack S;
InitStack(&S);
//测试进栈函数
Push(&S, 1);
Push(&S, 2);
Push(&S, 3);
Push(&S, 4);
//测试遍历栈函数
TraverseStack(&S);
//测试出栈函数
int data;
Pop(&S, &data);
printf("Pop data: %d\n", data);
TraverseStack(&S);
//测试十进制转二进制函数
DecimalToBinary(10);
DecimalToBinary(20);
DecimalToBinary(30);
return 0;
}
```
阅读全文