要求编写功能函数实现堆栈的定义,分别基于顺序栈和链栈:输入元素,编写进栈函数push();编写出栈函数pop();编写判断栈满和栈空的函数 ;遍历栈,并输出元素;实现十进制到二进制的转换。c语言实现完整代码
时间: 2024-05-15 20:15:43 浏览: 108
基于顺序栈的实现:
```
#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 Push(SqStack *S, int elem)
{
if(S->top == MAXSIZE-1) // 判断栈是否已满
return 0;
S->top++; // 栈顶指针加1
S->data[S->top] = elem; // 将元素压入栈顶
return 1;
}
// 出栈
int Pop(SqStack *S, int *elem)
{
if(S->top == -1) // 判断栈是否为空
return 0;
*elem = S->data[S->top];// 将栈顶元素弹出
S->top--; // 栈顶指针减1
return 1;
}
// 判断栈是否为空
int IsEmpty(SqStack S)
{
if(S.top == -1)
return 1;
return 0;
}
// 判断栈是否已满
int IsFull(SqStack S)
{
if(S.top == MAXSIZE-1)
return 1;
return 0;
}
// 遍历栈,并输出元素
void Traverse(SqStack S)
{
int i;
for(i=S.top; i>=0; i--)
printf("%d ", S.data[i]);
printf("\n");
}
// 十进制转二进制
void DecToBin(int dec)
{
SqStack S;
InitStack(&S);
while(dec){
Push(&S, dec%2);
dec /= 2;
}
while(!IsEmpty(S)){
int elem;
Pop(&S, &elem);
printf("%d", elem);
}
}
int main()
{
int elem;
SqStack S;
InitStack(&S);
Push(&S, 1);
Push(&S, 2);
Push(&S, 3);
Pop(&S, &elem);
Traverse(S);
DecToBin(10);
return 0;
}
```
基于链栈的实现:
```
#include <stdio.h>
#include <stdlib.h>
typedef struct LNode{
int data; // 存储栈元素
struct LNode *next; // 指向下一个结点的指针
}LNode, *LinkStack;
// 初始化栈
void InitStack(LinkStack *S)
{
*S = NULL;
}
// 进栈
int Push(LinkStack *S, int elem)
{
LNode *p = (LNode*)malloc(sizeof(LNode)); // 创建新结点
p->data = elem;
p->next = *S;
*S = p;
return 1;
}
// 出栈
int Pop(LinkStack *S, int *elem)
{
if(*S == NULL)
return 0;
LNode *p = *S;
*elem = p->data;
*S = p->next;
free(p);
return 1;
}
// 判断栈是否为空
int IsEmpty(LinkStack S)
{
if(S == NULL)
return 1;
return 0;
}
// 遍历栈,并输出元素
void Traverse(LinkStack S)
{
LNode *p = S;
while(p){
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
// 十进制转二进制
void DecToBin(int dec)
{
LinkStack S;
InitStack(&S);
while(dec){
Push(&S, dec%2);
dec /= 2;
}
while(!IsEmpty(S)){
int elem;
Pop(&S, &elem);
printf("%d", elem);
}
}
int main()
{
int elem;
LinkStack S;
InitStack(&S);
Push(&S, 1);
Push(&S, 2);
Push(&S, 3);
Pop(&S, &elem);
Traverse(S);
DecToBin(10);
return 0;
}
```
阅读全文