无头指针或无尾指针的循环队列的插入和删除节点的算法?

无头指针或无尾指针的循环队列的插入和删除节点的算法?,第1张

无头指针有尾指针就从尾指针找起,一个一个向前找,直至找到该队列的头指针为止,此时即可知道你需要插入和删除节点的位置

有头指针的无尾指针,从队列头起,一个一个向后找,直至找到该队列的尾指针为止,此时即可知道你需要插入和删除节点的位置

插入算法:在某个位置插入节点后,此后的节点逐个后移,并且将移动后的尾指针保存下来

删除算法:将该位置后的节点逐个前移,并且移动后将删除的节点用free函数释放其占用的内存空间

栈(Stack)是仅限制在表的一端进行插入和删除运算的线性表,称插入、删除这一端为栈顶,另一端称为栈底。表中无元素时为空栈。栈的修改是按后进先出的原则进行的,我们又称栈为LIFO表(LastInFirstOut)。通常栈有顺序栈和链栈两种存储结构。栈的基本运算有六种:·构造空栈:InitStack(S)·判栈空:StackEmpty(S)·判栈满:StackFull(S)·进栈:Push(S,x)·退栈:Pop(S)·取栈顶元素:StackTop(S)在顺序栈中有"上溢"和"下溢"的现象。·"上溢"是栈顶指针指出栈的外面是出错状态。·"下溢"可以表示栈为空栈,因此用来作为控制转移的条件。顺序栈中的基本 *** 作有六种:·构造空栈·判栈空·判栈满·进栈·退栈·取栈顶元素链栈则没有上溢的限制,因此进栈不要判栈满。链栈不需要在头部附加头结点,只要有链表的头指针就可以了。链栈中的基本 *** 作有五种:·构造空栈·判栈空·进栈·退栈·取栈顶元素队列(Queue)是一种运算受限的线性表,插入在表的一端进行,而删除在表的另一端进行,允许删除的一端称为队头(front),允许插入的一端称为队尾(rear),队列的 *** 作原则是先进先出的,又称作FIFO表(FirstInFirstOut)。队列也有顺序存储和链式存储两种存储结构。队列的基本运算有六种:·置空队:InitQueue(Q)·判队空:QueueEmpty(Q)·判队满:QueueFull(Q)·入队:EnQueue(Q,x)·出队:DeQueue(Q)·取队头元素:QueueFront(Q)顺序队列的"假上溢"现象:由于头尾指针不断前移,超出向量空间。这时整个向量空间及队列是空的却产生了"上溢"现象。为了克服"假上溢"现象引入循环向量的概念,是把向量空间形成一个头尾相接的环形,这时队列称循环队列。判定循环队列是空还是满,方法有三种:·一种是另设一个布尔变量来判断;·第二种是少用一个元素空间,入队时先测试((rear+1)%m=front)?满:空;·第三种就是用一个计数器记录队列中的元素的总数。队列的链式存储结构称为链队列,一个链队列就是一个 *** 作受限的单链表。为了便于在表尾进行插入(入队)的 *** 作,在表尾增加一个尾指针,一个链队列就由一个头指针和一个尾指针唯一地确定。链队列不存在队满和上溢的问题。在链队列的出队算法中,要注意当原队中只有一个结点时,出队后要同进修改头尾指针并使队列变空。

typedef struct CircleListNode{

Datatype d       

struct CircleList *pre,*nxt       

}*CircleList,CirListNode

typedef struct

{

CircleList Head

int num

}CircleQueue

void insertFront(CircleList *L,d)

{

if(!L)return NULL

if(*L==NULL)

{

*L=(CircleList) malloc(sizeof(CirListNode))

*L->nxt=  *L->pre=*L

*L->d=d

}

else

{      

CircleList p =(CircleList) malloc(sizeof(CirListNode))

p->nxt=*L

p->pre=*L->pre

*L->pre->nxt=p

*L->pre=p

*L=p       

}

}

循环单链表是单链表的另一种形式,其结构特点链表中最后一个结点的指针域不再是结束标记,而是指向整个链表的第一个结点,从而使链表形成一个环。和单链表相同,循环链表也有带头结点结构和不带头结点结构两种,带头结点的循环单链表实现插入和删除 *** 作较为方便。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11844563.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存