要求编写功能函数实现堆栈的定义,分别基于顺序栈和链栈: (1)编写进栈函数push(); (2)编写出栈函数pop(); (3)编写判断栈满和栈空的函数 (4)遍历栈,并输出元素(5)实现十进制到二进制的转换。c语言实现完整代码
时间: 2024-05-10 09:21:26 浏览: 129
(1)基于顺序栈的实现:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100 // 栈的最大长度
typedef struct {
int data[MAXSIZE]; // 存放栈元素
int top; // 栈顶指针
} SqStack;
// 初始化栈
void InitStack(SqStack *s) {
s->top = -1;
}
// 判断栈空
int StackEmpty(SqStack *s) {
if (s->top == -1) {
return 1;
} else {
return 0;
}
}
// 判断栈满
int StackFull(SqStack *s) {
if (s->top == MAXSIZE - 1) {
return 1;
} else {
return 0;
}
}
// 进栈操作
int Push(SqStack *s, int x) {
if (StackFull(s)) {
return 0; // 栈满,插入失败
} else {
s->top++;
s->data[s->top] = x;
return 1; // 插入成功
}
}
// 出栈操作
int Pop(SqStack *s, int *x) {
if (StackEmpty(s)) {
return 0; // 栈空,删除失败
} else {
*x = s->data[s->top];
s->top--;
return 1; // 删除成功
}
}
// 遍历栈,并输出元素
void TraverseStack(SqStack *s) {
int i;
for (i = s->top; i >= 0; i--) {
printf("%d ", s->data[i]);
}
printf("\n");
}
// 实现十进制到二进制的转换
void DecToBin(int n) {
SqStack s;
int x;
InitStack(&s);
while (n != 0) {
Push(&s, n % 2);
n = n / 2;
}
while (!StackEmpty(&s)) {
Pop(&s, &x);
printf("%d", x);
}
printf("\n");
}
int main() {
SqStack s;
InitStack(&s);
Push(&s, 1);
Push(&s, 2);
Push(&s, 3);
TraverseStack(&s);
int x;
Pop(&s, &x);
TraverseStack(&s);
DecToBin(10);
return 0;
}
```
(2)基于链栈的实现:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct LNode {
int data;
struct LNode *next;
} LinkNode, *LinkStack;
// 初始化栈
void InitStack(LinkStack *s) {
*s = NULL;
}
// 判断栈空
int StackEmpty(LinkStack s) {
if (s == NULL) {
return 1;
} else {
return 0;
}
}
// 进栈操作
int Push(LinkStack *s, int x) {
LinkNode *p = (LinkNode *)malloc(sizeof(LinkNode));
p->data = x;
p->next = *s;
*s = p;
return 1; // 插入成功
}
// 出栈操作
int Pop(LinkStack *s, int *x) {
if (StackEmpty(*s)) {
return 0; // 栈空,删除失败
} else {
LinkNode *p = *s;
*x = p->data;
*s = p->next;
free(p);
return 1; // 删除成功
}
}
// 遍历栈,并输出元素
void TraverseStack(LinkStack s) {
LinkNode *p = s;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
// 实现十进制到二进制的转换
void DecToBin(int n) {
LinkStack s;
InitStack(&s);
while (n != 0) {
Push(&s, n % 2);
n = n / 2;
}
int x;
while (!StackEmpty(s)) {
Pop(&s, &x);
printf("%d", x);
}
printf("\n");
}
int main() {
LinkStack s;
InitStack(&s);
Push(&s, 1);
Push(&s, 2);
Push(&s, 3);
TraverseStack(s);
int x;
Pop(&s, &x);
TraverseStack(s);
DecToBin(10);
return 0;
}
```
阅读全文