下面我会给您讲解一下C语言实现栈的示例代码的完整攻略。
一、栈的定义
栈(Stack)是一种只能在一端进行插入或删除操作的线性表。栈按照先进后出(Last in First Out)的原则进行操作,也就是说后插入进去的元素先被删除。
栈的两个特殊点:
- 栈底:数据插入的一端,即数据结构的初始位置。
- 栈顶:栈最近插入的元素所在的位置。
二、栈的操作
栈的基本操作包括:
- 初始化栈:创建一个新的空栈。
- 压栈:在栈顶插入元素。
- 弹栈:删除并返回栈顶元素。
- 获取栈顶元素:查询最后插入的元素但不删除。
- 判断栈是否为空:查询栈是否为空栈。
三、C语言实现栈的示例代码
以下就为大家介绍一个简单的C语言实现栈的示例代码:
#define MAXSIZE 100 // 定义栈的最大长度
typedef struct {
int data[MAXSIZE]; // 存储元素的数组
int top; // 栈顶指针
} Stack;
void InitStack(Stack *s) { // 初始化栈
s->top = -1;
}
bool Push(Stack *s, int x) { // 插入元素
if (s->top == MAXSIZE - 1) { // 判断栈是否已满
return false;
}
s->top++; // 栈顶指针加1
s->data[s->top] = x; // 插入元素
return true;
}
bool Pop(Stack *s, int *x) { // 删除并返回元素
if (s->top == -1) { // 判断栈是否为空
return false;
}
*x = s->data[s->top]; // 取出栈顶元素
s->top--; // 栈顶指针减1
return true;
}
bool GetTop(Stack *s, int *x) { // 获取栈顶元素
if (s->top == -1) { // 判断栈是否为空
return false;
}
*x = s->data[s->top];
return true;
}
bool IsEmpty(Stack *s) { // 判断栈是否为空
if (s->top == -1) {
return true;
}
return false;
}
以上是一个C语言栈的示例代码,其中定义了一个结构体Stack,里面包含一个数组data和一个栈顶指针top。函数实现了初始化栈、插入元素、删除并返回元素、获取栈顶元素和判断栈是否为空的功能。
下面给出两个简单的示例说明:
示例一:利用栈实现字符串的反转
#include <stdio.h>
#include <string.h>
#define MAXSIZE 100
typedef struct {
char data[MAXSIZE];
int top;
} Stack;
void InitStack(Stack *s) {
s->top = -1;
}
bool Push(Stack *s, char x) {
if (s->top == MAXSIZE - 1) {
return false;
}
s->top++;
s->data[s->top] = x;
return true;
}
bool Pop(Stack *s, char *x) {
if (s->top == -1) {
return false;
}
*x = s->data[s->top];
s->top--;
return true;
}
bool IsEmpty(Stack *s) {
if (s->top == -1) {
return true;
}
return false;
}
int main() {
char str[MAXSIZE];
Stack s;
int i;
printf("请输入一个字符串:");
scanf("%s", str);
int len = strlen(str);
InitStack(&s);
for (i = 0; i < len; i++) {
Push(&s, str[i]);
}
for (i = 0; i < len; i++) {
Pop(&s, &str[i]);
}
printf("反转后的字符串为:%s\n", str);
return 0;
}
对于这个示例,首先定义了一个栈的结构体,包含了一个字符数组data和栈顶指针top。定义了初始化栈、插入元素、删除并返回元素和判断栈是否为空的函数。然后在主函数中,输入一个字符串后将其依次压入栈中。接下来,依次弹栈并将取到的字符放回字符串,最后输出反转后的结果。
示例二:利用栈判断一个字符串是否为回文字符串
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
#define MAXSIZE 100
typedef struct {
char data[MAXSIZE];
int top;
} Stack;
void InitStack(Stack *s) {
s->top = -1;
}
bool Push(Stack *s, char x) {
if (s->top == MAXSIZE - 1) {
return false;
}
s->top++;
s->data[s->top] = x;
return true;
}
bool Pop(Stack *s, char *x) {
if (s->top == -1) {
return false;
}
*x = s->data[s->top];
s->top--;
return true;
}
bool IsEmpty(Stack *s) {
if (s->top == -1) {
return true;
}
return false;
}
int main() {
char str[MAXSIZE];
Stack s;
int i;
bool flag = true; // 标记变量
printf("请输入一个字符串:");
scanf("%s", str);
int len = strlen(str);
InitStack(&s);
for (i = 0; i < len; i++) {
Push(&s, str[i]);
}
for (i = 0; i < len; i++) {
char x;
Pop(&s, &x);
if (x != str[i]) { // 当有字符不相等时,说明不是回文字符串
flag = false;
break;
}
}
if (flag) {
printf("%s是回文字符串\n", str);
} else {
printf("%s不是回文字符串\n", str);
}
return 0;
}
对于这个示例,首先同样定义了一个栈的结构体,包含了一个字符数组data和栈顶指针top。定义了初始化栈、插入元素、删除并返回元素和判断栈是否为空的函数。然后在主函数中,输入一个字符串后将其依次压入栈中。接下来,依次弹栈并与原字符串中的字符进行比较,当有不相等的情况出现时,说明这个字符串不是回文字符串。如果全部字符都相等,说明这是一个回文字符串。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言实现栈的示例代码 - Python技术站