队列定义 一种线性数据结构 只允许在头部删除,叫做出队,尾部插入,叫做入队,当无元素时叫做空队列(即head==tail)
使用: 一般将其封装为一个结构体类型
struct queue
{
int data[100]//储存数据
int head//队列头
int tail//队列尾
};
例题 给定9个数据,将其第一个数据丢掉,将第二个数据补到队尾,重复,直到全部数据删除·
输入
6 3 1 7 5 8 9 2 4
输出
6 1 5 9 4 7 2 8 3
#include <stdio.h>
struct queue
{
int data[100];
int head;
int tail;
}q;
int main()
{
q.head = 1;
q.tail = 1;
for (int i = 0; i < 9; i++)
{
scanf("%d", &q.data[i]);//载入数据
q.tail++;//更新尾部
}
while (q.head < q.tail)
{
printf("%d", q.data[q.head]);
q.head++;//输出数据并删除
q.data[q.tail] = q.data[q.head];//存入尾部;
q.head++;
q.tail++;
}
return 0;
}
总结一下队列先入先出
栈 先入先出
栈 定义:是只允许在一端进行插入或删除的线性表。
使用 :利用一个一维数组 和 一个栈顶变量实现栈 ,利用栈顶变量(top)实现对栈的插入和删除
例题 判断一个字符串是否为回文字符
#include <stdio.h>
#include <string.h>
int main()
{
char a[101], s[101];
int top = 0,next;
gets(a);
int len = strlen(a);
int mid = len / 2 - 1;
for (int i = 0; i < len; i++)
{
s[top++] = a[i];
}
if (len % 2 == 0)
{
next = mid + 1;
}
else
{
next = mid + 2;
}
for (int i = next; i <= len - 1; i++)
{
if (a[i] != s[top])
{
break;
top--;
}
}
if (top == 0)
printf("YES");
else
printf("NO");
return 0;
}