用栈和循环队列分离奇偶数
时间: 2024-06-13 10:04:23 浏览: 10
可以使用栈和循环队列来分离奇偶数。具体步骤如下:
1. 首先,将所有的数依次入栈。
2. 然后,创建一个循环队列,将栈中的数依次出栈并入队。
3. 在队列中,依次取出每个数,判断其是否为偶数,如果是偶数,则将其入栈;如果是奇数,则将其入队。
4. 最后,将栈中的数依次出栈并输出,即为所有的偶数;将队列中的数依次出队并输出,即为所有的奇数。
相关问题
实现顺序栈和循环队列的代码
好的,下面是实现顺序栈和循环队列的代码:
顺序栈的实现:
```
#define MAXSIZE 100
typedef struct {
int data[MAXSIZE];
int top;
}SqStack;
void InitStack(SqStack *S) // 初始化栈
{
S->top = -1;
}
bool Push(SqStack *S, int x) // 入栈操作
{
if(S->top == MAXSIZE-1) // 栈已满
{
return false;
}
S->data[++S->top] = x; // 入栈
return true;
}
bool Pop(SqStack *S, int *x) // 出栈操作
{
if(S->top == -1) // 栈为空
{
return false;
}
*x = S->data[S->top--]; // 出栈
return true;
}
bool GetTop(SqStack S, int *x) // 获取栈顶元素
{
if(S.top == -1) // 栈为空
{
return false;
}
*x = S.data[S.top]; // 获取栈顶元素
return true;
}
```
循环队列的实现:
```
#define MAXSIZE 100
typedef struct {
int data[MAXSIZE];
int front; // 队头指针
int rear; // 队尾指针
}SqQueue;
void InitQueue(SqQueue *Q) // 初始化队列
{
Q->front = Q->rear = 0;
}
bool EnterQueue(SqQueue *Q, int x) // 入队操作
{
if((Q->rear+1)%MAXSIZE == Q->front) // 队列已满
{
return false;
}
Q->data[Q->rear] = x; // 入队
Q->rear = (Q->rear+1)%MAXSIZE; // 队尾指针后移
return true;
}
bool DeleteQueue(SqQueue *Q, int *x) // 出队操作
{
if(Q->front == Q->rear) // 队列为空
{
return false;
}
*x = Q->data[Q->front]; // 出队
Q->front = (Q->front+1)%MAXSIZE; // 队头指针后移
return true;
}
bool GetHead(SqQueue Q, int *x) // 获取队头元素
{
if(Q.front == Q.rear) // 队列为空
{
return false;
}
*x = Q.data[Q.front]; // 获取队头元素
return true;
}
```
用栈和队列判断回文
判断回文的方法是将字符串正序和倒序排列后比较是否相等,而栈和队列可以用来实现这个过程。
使用栈的方法:
1. 创建一个空栈
2. 将字符串中的每个字符依次入栈
3. 将栈中的元素依次出栈,并用一个新的字符串保存出栈的元素
4. 将新字符串与原字符串比较,如果相等则为回文,否则不是回文。
使用队列的方法:
1. 创建一个空队列
2. 将字符串中的每个字符依次入队
3. 创建一个新字符串,从队列中依次出队并将出队的元素添加到新字符串中
4. 将新字符串与原字符串比较,如果相等则为回文,否则不是回文。
下面是使用 Python 实现使用栈和队列判断回文的示例代码:
```python
# 使用栈判断回文
def is_palindrome_stack(s):
stack = []
for c in s:
stack.append(c)
reversed_str = ''
while len(stack) > 0:
reversed_str += stack.pop()
return s == reversed_str
# 使用队列判断回文
def is_palindrome_queue(s):
queue = []
for c in s:
queue.append(c)
reversed_str = ''
while len(queue) > 0:
reversed_str += queue.pop(0)
return s == reversed_str
```
注意,在上述代码中,我们没有考虑字符串中的空格、标点符号等特殊字符。如果需要考虑这些特殊字符,可以在入栈或者入队之前先将字符串转换成小写,并去掉空格、标点等特殊字符。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)