用c语言实现,根据栈元素个数n和各元素值建立一个顺序栈
时间: 2024-02-01 10:13:10 浏览: 122
以下是用C语言实现建立一个顺序栈的代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义栈结构体
typedef struct {
int *data; // 栈的数据
int top; // 栈顶指针
int size; // 栈的大小
} SeqStack;
// 初始化栈
void InitStack(SeqStack *pStack, int n)
{
pStack->data = (int *)malloc(sizeof(int) * n); // 分配n个int大小的空间
pStack->top = -1; // 栈顶指针初始化为-1
pStack->size = n; // 栈的大小为n
}
// 判断栈是否为空
int IsEmpty(SeqStack *pStack)
{
return pStack->top == -1;
}
// 判断栈是否已满
int IsFull(SeqStack *pStack)
{
return pStack->top == pStack->size - 1;
}
// 入栈
void Push(SeqStack *pStack, int x)
{
if (IsFull(pStack)) {
printf("Stack is full.\n");
return;
}
pStack->top++;
pStack->data[pStack->top] = x;
}
// 出栈
int Pop(SeqStack *pStack)
{
if (IsEmpty(pStack)) {
printf("Stack is empty.\n");
return -1;
}
int x = pStack->data[pStack->top];
pStack->top--;
return x;
}
// 获取栈顶元素
int Top(SeqStack *pStack)
{
if (IsEmpty(pStack)) {
printf("Stack is empty.\n");
return -1;
}
return pStack->data[pStack->top];
}
// 输出栈中元素
void PrintStack(SeqStack *pStack)
{
if (IsEmpty(pStack)) {
printf("Stack is empty.\n");
return;
}
printf("Stack: ");
for (int i = pStack->top; i >= 0; i--) {
printf("%d ", pStack->data[i]);
}
printf("\n");
}
int main()
{
int n = 5;
SeqStack stack;
InitStack(&stack, n);
for (int i = 0; i < n; i++) {
Push(&stack, i + 1);
}
PrintStack(&stack);
Pop(&stack);
PrintStack(&stack);
printf("Top element: %d\n", Top(&stack));
return 0;
}
```
在这个例子中,我们定义了一个栈结构体 `SeqStack`,其中包含了栈的数据、栈顶指针和栈的大小。我们通过 `InitStack` 函数初始化栈,并通过 `Push`、`Pop`、`Top` 和 `PrintStack` 函数实现了入栈、出栈、获取栈顶元素和输出栈中元素的功能。
阅读全文