
简单来说像这样的犹如一条线的结构就属于线性结构 常见有我们熟知的数组还有单链表。
数组
在学数据结构之前我们对数组就很了解了,最简单的就是一维数组,一维数组也是最简单的线性结构。
优点:
1.访问方便,之间访问下标对应元素即可
2.写起来也方便用起来也方便看着也舒服
缺点:
1.在中间位置插入元素时,其后所以元素都需要后移,造成时间的大量浪费
2.有时不能准确确定需要开多大,对内存造成浪费
链表
链表在学数据结构之前我们是比较陌生的,但数据结构中用的就比较多了,特别是后面树和图。
有点
1.插入删除方便
2.需要时可以申请内存,不需要的结点可以随时删除,比较灵活
缺点
1.操作较为复杂
2.涉及到指针,可能理解起来有些难,而且很容易弄错
链表的建立:
#include<stdio.h>
#include<stdlib.h> // 申请内存必备头文件
struct lb
{
int data;
struct lb*next;
} lb;
int main()
{
struct lb *head1,*q,*p;
int n,m,i,j,k;
scanf("m=%d",&n);
head1=NULL;
for(i=0; i<n; i++) {
scanf("%d\n",&j);
p=(struct lb*)malloc(sizeof(struct lb)); // 动态申请内存
p->data=j;
p->next=NULL;
if(head1==NULL)head1=p;
else q->next=p;
q=p;
}
双线链表与循环链表,则要在结构体中加入一个指向前一个元素的指针。
#include<stdio.h>
#include<stdlib.h>
struct lb
{
int data;
struct lb*next;
struct lb*before;
};
int main()
{
struct lb *p,*q,*head,*tail,*t;
int m,sc,cr,ys,ks,i,j,flag;
while(scanf("%d",&m)!=EOF)
{
head=NULL;
for(i=1; i<=m; i++)
{
p=(struct lb*)malloc(sizeof(struct lb));
scanf("%d",&j);
p->data=j;
p->next=NULL;
p->before=NULL;
if(!head)head=p;
else {
q->next=p;
p->before=q;
}
q=p;
}
q->next=NULL;
tail=q;
tail->next=head;
head->before=tail;
}
队列
顾名思义,就像我们去食堂排队吃饭一样,谁先到谁就先买到饭然后离开
队列:先进先出
添加元素与栈相同,都是添加在末尾,而弹出元素则是弹出首位
我学到的算法BFS就是队列运用的很好例子
https://vjudge.net/contest/353252#problem/D
此题就运用BFS算法
如下为核心部分入队操作:
head 表示 队首, tail 表示 队尾
每次有新成员加入,则队尾tail下标后移;假如有人出队,则删除head当前位置元素,然后将head后移。
while(head < tail)
{
for(int i = 0; i < 6; i++)
{
int tl, tr, tc;
tl = a[head].l + next[i][0];
tr = a[head].r + next[i][1];
tc = a[head].c + next[i][2];
if(tl < 0 || tl >= l || tr < 0 || tr >= r || tc < 0 || tc >= c || b[tl][tr][tc] || s[tl][tr][tc] == '#')
continue;
a[tail].l = tl;
a[tail].r = tr;
a[tail].c = tc;
a[tail].step = a[head].step + 1;
tail++;
b[tl][tr][tc] = 1;
if(s[tl][tr][tc] == 'E')
{
flag = 1;
break;
}
}
if(flag)
break;
head++;
}
栈
栈:先进后出
添加元素与队列相同,都是添加在末尾,而弹出元素则是弹出尾位
我们平常用浏览器
退位键就是典型的栈,我们最先点进的网页我要退到此网页,我们则需要退回到最后一个网页(模拟一下就知道了),这就是典型的先进后出。
还有著名的逆波兰序列也运用了栈知识。
head 表示 队首, tail 表示 队尾
每次有新成员加入,则队尾tail下标后移;假如有人出栈,则删除tail当前位置元素,然后将tail前移。
本文深入探讨了数据结构中的线性结构,包括数组和链表的特点及应用,对比了它们的优缺点,并详细介绍了链表的创建过程。此外,还讨论了队列和栈这两种特殊线性结构的工作原理。
528

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



