要求编写功能函数实现堆栈的定义,基于链栈:按用户要求输入元素,编写进栈函数push();编写出栈函数pop();编写判断栈满和栈空的函数 ;遍历栈,并输出元素;输入数据实现十进制到二进制的转换。c语言实现完整代码,并给出算法流程
时间: 2024-05-22 18:16:05 浏览: 54
先定义堆栈的几个基本操作,再设计一主函数利用堆的操作完成以下功能
算法流程:
1.定义链栈结构体StackNode和栈指针Stack
2.定义进栈函数push(),判断栈是否为空,如果为空则创建头结点并添加元素,否则在头结点后添加元素
3.定义出栈函数pop(),判断栈是否为空,如果为空则提示“栈为空”,否则将头结点元素删除,并返回删除元素
4.定义判断栈满函数isFull(),链栈不满,所以直接返回false
5.定义判断栈空函数isEmpty(),判断头结点指针是否为空,如果为空则返回true,否则返回false
6.定义遍历栈函数traverse(),从头结点开始遍历所有元素,并输出
7.定义十进制转二进制函数decimalToBinary(),使用栈实现,将余数依次压入栈中,最后依次出栈得到二进制数
完整代码如下:
#include <stdio.h>
#include <stdlib.h>
typedef struct StackNode {
int data;
struct StackNode *next;
} StackNode, *Stack;
void push(Stack *s, int data);
int pop(Stack *s);
int isFull(Stack s);
int isEmpty(Stack s);
void traverse(Stack s);
void decimalToBinary(int decimal);
int main() {
Stack s = NULL;
int choice, data, decimal;
do {
printf("1. 进栈\n");
printf("2. 出栈\n");
printf("3. 判断栈是否为空\n");
printf("4. 遍历栈\n");
printf("5. 十进制转二进制\n");
printf("0. 退出\n");
printf("请输入选项:");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("请输入元素:");
scanf("%d", &data);
push(&s, data);
break;
case 2:
data = pop(&s);
if (data != -1) {
printf("出栈元素:%d\n", data);
}
break;
case 3:
if (isEmpty(s)) {
printf("栈为空\n");
} else {
printf("栈不为空\n");
}
break;
case 4:
traverse(s);
break;
case 5:
printf("请输入十进制数:");
scanf("%d", &decimal);
decimalToBinary(decimal);
break;
case 0:
break;
default:
printf("输入错误,请重新输入\n");
break;
}
} while (choice != 0);
return 0;
}
void push(Stack *s, int data) {
StackNode *node = (StackNode*)malloc(sizeof(StackNode));
node->data = data;
node->next = *s;
*s = node;
}
int pop(Stack *s) {
if (isEmpty(*s)) {
printf("栈为空\n");
return -1;
}
StackNode *node = *s;
int data = node->data;
*s = (*s)->next;
free(node);
return data;
}
int isFull(Stack s) {
return 0;
}
int isEmpty(Stack s) {
return s == NULL;
}
void traverse(Stack s) {
if (isEmpty(s)) {
printf("栈为空\n");
return;
}
StackNode *node = s;
while (node != NULL) {
printf("%d ", node->data);
node = node->next;
}
printf("\n");
}
void decimalToBinary(int decimal) {
Stack s = NULL;
while (decimal != 0) {
push(&s, decimal % 2);
decimal /= 2;
}
printf("二进制数:");
while (!isEmpty(s)) {
printf("%d", pop(&s));
}
printf("\n");
}
阅读全文