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
}
[扩展]
以“结点的序列”表示线性表称作线性链表(单链表),链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)