1、队列
定义:形如我们排队买票,第一个站队的人第一个买票一样,一个可以控制变量先进先出的结构体里,我们称之为队列。
理解:我们可以想象出一排东西整齐存放于一行里,我们要做的是用一个可以压缩的框框,通过从前到后移动,来决定我们框住的值到底为多少。
实现代码如下:
#include<stdio.h>
#include<algorithm>
int main(){
int q[102]={
0,6,3,1,7,5,8,9,2,4},head,tail;
head=1;
tail=10;//队列初始化
while(head<tail)
{
cout<<q[head];
head++;
q[tail]=q[head];
tail++;
head++;
}
getchar();getchar();
return 0;
}
总结:队列属于一种特殊的线性结构,它只允许在队列首部删除,队列尾部插入,称为入队。当队列中没有元素的时候,我们称之为空队列。队列将作为我们今后广度优先搜索(BFS)和队列优化的Bellman-Ford最短路算法的核心数据。
P.S.我们可以将队列定义为一个结构体,即一共两个变量一个数组的结构。
e.g.`
struct queue
{
int data[100];//队列的主体,
int head;//队首
int tail;//队尾
};
//上面是结构体的定义,下面定义一个名为q的结构体
struct queue q;
q.head=1;
q.tail=1;
cin>>q.data[q.tail];
2、栈
定义:栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
理解:例如汉诺塔,我们把123号塔依次放入,若要移出1号塔,首先要移出3号塔,然后是2号。说白了就是一个后进先出的数据结构,我们只能在一端进行操作。可以判断回文,数据如下:
#include<stdio.h>;
#include<string.h>;
#include<algorithm>;
int main(){
char a[101],s[101];
int i,len,mid,next,top;
gets(a);//读入一串字符串
len=strlen(a);//求字符串的长度
mid=len/2-1;//寻找中点
top=0;//栈初始化
for(i=0;i<=mid;i++)
s[++top]=a[i];//依次入栈
//判断字符串长度是奇还是偶,并找出需要进行字符匹配的起始下标
if(len%2==0)
next=mid+1;
else
next=mid+2;
//开始判断匹配
for(i=next;i<=len-1;i++)
{
if(a[i]!=s[top])
break;
top--;
}
if(top==0)//如果top的值为0;则说明栈内的字符都被匹配过了
cout<<"yes";
else cout<<"NO";
getchar():getchar();
return 0;
}
总结使用:大家可以尝试做做此题:
问题描述:
小哼和小哈在玩一个比较奇怪的扑克游戏——小猫钓鱼。游戏规则:将一副扑克牌平均分成两份,没人拿一分。小哼先拿出手中第一张扑克牌放在桌上,然后小哈也拿出手中第一张扑克牌,并放在小哼刚才打出的扑克牌的上面,两人交替出牌。出牌时,如果某人打出的牌与桌上某张牌的牌面相同,可将两张相同的牌及其中间所夹的牌全部拿走,并依次放到自己手中牌的末尾。当任意一人手中当牌出完时,游戏结束,对方获胜。
分析:
1、这个游戏一共有两种操作:出牌和赢牌。
出牌即出队,赢牌即入队。
</

本文深入介绍了数据结构中的栈、队列和链表。详细讲解了它们的定义、理解及实现代码,还探讨了在解决实际问题中的应用,如广度优先搜索和判断回文。同时,提到了链表的插入操作及其相对于数组的灵活性,并提供了模拟链表的实现方式。
--栈,队列,链表&spm=1001.2101.3001.5002&articleId=52900496&d=1&t=3&u=566de97046fe4da8896f500ab64f0520)
929

被折叠的 条评论
为什么被折叠?



