用循环单链表实现循环队列,如何写出插入和删除的算法?

用循环单链表实现循环队列,如何写出插入和删除的算法?,第1张

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       

}

}

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

建立一个单链表,实现插入与删除功能的代码如下:

///单链表

#include<iostream>

using namespace std

typedef int elemtype //数据类型模版

struct Lnode //结点

{

elemtype data

Lnode *next

}

///建表

void creat_Link(Lnode &head)

{

Lnode *p,*q

int n

p=new Lnode

head=p

cout<<"输入链表长度:"<<endl

cin>>n

cout<<"输入数据:"<<endl

cin>>p->data

q=p

for(int i=1i<=n-1i++)

{

p=new Lnode

//cout<<"输入数据:"

cin>>p->data

q->next=p

q=p

}

q->next=NULL

}

///表的输出

void output_Link(Lnode *&head)

{

if(head==NULL)

{cout<<"空链表!"<<endl

return}

Lnode *q

q=head

//cout<<"此链表为:"

while(q!=NULL)

{

cout<<q->data<<" "

q=q->next

}

cout<<endl

}

///表的插入

void insert_Link(Lnode *&head)

{

int i

cout<<"输入要插入的位置:"

cin>>i

Lnode *q,*iq

q=head

for(int j=1j<ij++)

{

iq=q

q=q->next

}

cout<<"输入插入的数据:"

Lnode *p

p=new Lnode

cin>>p->data

p->next=iq->next

iq->next=p

cout<<endl

}

///表的数据删除

void Delete_Link(Lnode *&head)

{

cout<<"输入删除的位置:"

int i

cin>>i

if(i==1)

head=head->next

else

{

Lnode *p,*q

q=head

for(int j=1j<ij++)

{p=q

q=q->next

}

p->next=q->next

delete q

cout<<endl

}

}

int main()

{

Lnode *head

head=NULL

creat_Link(head)

insert_Link(head)

output_Link(head)

Delete_Link(head)

output_Link(head)

return 0

}

[扩展]

以“结点的序列”表示线性表称作线性链表(单链表),链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存