c和c++实现栈的区别
时间: 2024-05-26 20:14:18 浏览: 15
C和C++实现栈的区别主要在语言特性上。
在C语言中,可以使用结构体和指针来实现栈。通常使用动态分配内存来实现栈的元素存储,使用指针来指向栈顶元素,并且需要手动管理内存。
在C++语言中,可以使用std::stack模板类来实现栈。std::stack是一个容器适配器,底层实现可以是数组、链表或其他结构。使用std::stack可以避免手动管理内存,同时还提供了一些方便的成员函数,如push()、pop()、top()等。
因此,C++实现栈更加方便和易于使用。
相关问题
C++实现栈的回文判断
栈是一种后进先出(Last In First Out)的数据结构,可以利用栈来判断字符串是否为回文字符串。
回文字符串的定义是正着读和倒着读都一样的字符串,例如 "level" 和 "racecar" 都是回文字符串。
以下是 C 语言实现栈的回文判断的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#define MAX_SIZE 100
typedef struct {
char data[MAX_SIZE];
int top;
} Stack;
void initStack(Stack *pStack) {
pStack->top = -1;
}
bool isEmpty(Stack *pStack) {
return (pStack->top == -1);
}
bool isFull(Stack *pStack) {
return (pStack->top == MAX_SIZE - 1);
}
void push(Stack *pStack, char item) {
if (isFull(pStack)) {
printf("Stack overflow\n");
exit(EXIT_FAILURE);
}
pStack->data[++pStack->top] = item;
}
char pop(Stack *pStack) {
if (isEmpty(pStack)) {
printf("Stack underflow\n");
exit(EXIT_FAILURE);
}
return pStack->data[pStack->top--];
}
bool isPalindrome(char *str) {
Stack stack;
int len = strlen(str);
initStack(&stack);
for (int i = 0; i < len; i++) {
push(&stack, str[i]);
}
for (int i = 0; i < len; i++) {
if (pop(&stack) != str[i]) {
return false;
}
}
return true;
}
int main() {
char str[MAX_SIZE];
printf("Enter a string: ");
gets(str);
if (isPalindrome(str)) {
printf("%s is a palindrome string\n", str);
} else {
printf("%s is not a palindrome string\n", str);
}
return 0;
}
```
在上面的代码中,我们定义了一个结构体 `Stack`,包含一个字符数组和一个栈顶指针 `top`。`initStack()` 函数用于初始化栈,`isEmpty()` 函数用于判断栈是否为空,`isFull()` 函数用于判断栈是否已满,`push()` 函数用于将元素压入栈中,`pop()` 函数用于弹出栈顶元素。
`isPalindrome()` 函数用于判断字符串是否为回文字符串,我们先将字符串中的每个字符依次压入栈中,然后再依次弹出栈顶元素与字符串中的字符比较,如果不相等则说明不是回文字符串,返回 `false`,否则返回 `true`。
在 `main()` 函数中,我们获取用户输入的字符串,并在控制台输出判断结果。注意,这里使用 `gets()` 函数获取用户输入,但是该函数存在缺陷,容易导致缓冲区溢出,因此在实际应用中应该使用更加安全的输入函数,例如 `fgets()`。
C++实现栈的基本操作
栈是一种后进先出(LIFO)的数据结构,常用的基本操作包括入栈、出栈、获取栈顶元素和判断栈是否为空。以下是 C 实现栈的基本操作的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
typedef struct {
int data[MAX_SIZE];
int top;
} Stack;
void init(Stack *s) {
s->top = -1;
}
int is_empty(Stack *s) {
return s->top == -1;
}
int is_full(Stack *s) {
return s->top == MAX_SIZE - 1;
}
void push(Stack *s, int value) {
if (is_full(s)) {
printf("Stack is full.\n");
exit(1);
}
s->data[++s->top] = value;
}
int pop(Stack *s) {
if (is_empty(s)) {
printf("Stack is empty.\n");
exit(1);
}
return s->data[s->top--];
}
int top(Stack *s) {
if (is_empty(s)) {
printf("Stack is empty.\n");
exit(1);
}
return s->data[s->top];
}
int main() {
Stack s;
init(&s);
push(&s, 1);
push(&s, 2);
push(&s, 3);
printf("%d\n", top(&s));
printf("%d\n", pop(&s));
printf("%d\n", pop(&s));
printf("%d\n", pop(&s));
printf("%d\n", is_empty(&s));
return 0;
}
```
这段代码定义了一个结构体 Stack,包含一个数组 data 和一个整数 top,表示栈顶元素的下标。init 函数用于初始化栈,is_empty 和 is_full 函数分别用于判断栈是否为空和是否已满。push 函数用于入栈,pop 函数用于出栈,top 函数用于获取栈顶元素。在 main 函数中,我们创建了一个栈 s,依次将元素 1、2、3 入栈,然后依次取出并输出,最后判断栈是否为空。