要求编写功能函数实现堆栈的定义,基于链栈:按用户要求输入元素,编写进栈函数push();编写出栈函数pop();编写判断栈满和栈空的函数 ;遍历栈,并输出元素;输入数据实现十进制到二进制的转换。c语言实现完整代码,并给出算法流程
时间: 2024-05-24 08:11:00 浏览: 50
先定义堆栈的几个基本操作,再设计一主函数利用堆的操作完成以下功能
算法流程:
1. 定义结构体Node,包含数据域和指针域
2. 定义栈顶指针top,并初始化为NULL
3. 实现push函数,创建一个新节点,将数据存储到节点中,将新节点插入到栈顶,并更新top指针
4. 实现pop函数,判断栈是否为空,如果是则返回NULL,否则将栈顶元素弹出,更新top指针,并返回弹出的元素
5. 实现isEmpty函数,判断栈是否为空,如果top指针为NULL,则栈为空
6. 实现isFull函数,链栈没有容量限制,因此不需要判断栈是否满
7. 实现traverse函数,从栈顶开始遍历链表,输出每个节点的数据
8. 实现decimalToBinary函数,输入十进制数,将其转换为二进制数,并依次调用push函数将每个位的值压入栈,最后依次弹出栈中的元素,得到二进制数的值
9. 在主函数中调用各个函数完成堆栈的操作
完整代码如下:
#include <stdio.h>
#include <stdlib.h>
//定义链栈节点结构体
typedef struct Node {
int data; //数据域
struct Node *next; //指针域
} Node, *Stack;
Node* top = NULL; //栈顶指针
//进栈操作
void push(int value) {
Node *newNode = (Node*)malloc(sizeof(Node)); //创建新节点
newNode->data = value; //存储数据
newNode->next = top; //将新节点插入到栈顶
top = newNode; //更新栈顶指针
}
//出栈操作
int pop() {
if (top == NULL) { //判断栈是否为空
return NULL;
}
int value = top->data; //获取栈顶元素的值
Node *temp = top; //保存栈顶节点
top = top->next; //更新栈顶指针
free(temp); //释放栈顶节点的内存
return value; //返回弹出的元素
}
//判断栈是否为空
int isEmpty() {
return top == NULL;
}
//判断栈是否满
int isFull() {
return 0;
}
//遍历栈并输出元素
void traverse() {
Node *p = top;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
//将十进制数转换为二进制数
void decimalToBinary(int decimal) {
int remainder;
while (decimal != 0) {
remainder = decimal % 2; //获取余数
push(remainder); //将余数压入栈
decimal /= 2; //更新被除数
}
while (!isEmpty()) {
printf("%d", pop()); //依次弹出栈中元素并输出
}
}
int main() {
int choice, value, decimal;
while (1) {
printf("1. Push\n");
printf("2. Pop\n");
printf("3. Traverse\n");
printf("4. Decimal to Binary\n");
printf("5. Exit\n");
printf("Enter your choice: ");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("Enter the value to be pushed: ");
scanf("%d", &value);
push(value);
break;
case 2:
value = pop();
if (value == NULL) {
printf("Stack is empty.\n");
} else {
printf("Popped value is %d.\n", value);
}
break;
case 3:
traverse();
break;
case 4:
printf("Enter the decimal number: ");
scanf("%d", &decimal);
printf("Binary number is ");
decimalToBinary(decimal);
printf(".\n");
break;
case 5:
exit(0);
default:
printf("Invalid choice. Please try again.\n");
}
}
return 0;
}
阅读全文