2023/2/6 双向链表、单向循环链表、双向循环链表
作业:
1,实现双向链表按元素删除
//按位置删除,成功返回0,否则返回-1
int DeleteByPos(DoubleLink L,int pos)
{
if(L->len==0||pos<1||pos>L->len+1)
{
return -1;
}
DoubleLink p=L;
for(int i=0;i<pos-1;i++)
{
p=p->next;
}
DoubleLink q=p->next;
p->next=q->next;
q->next->prev=p;
free(q);
q=NULL;
L->len--;
return 0;
}
//按元素删除
int DeleteByData(DoubleLink L,datatype e)
{
if(L->len==0)
{
return -1;
}
DoubleLink p=L;
for(int i=1;i<=L->len;i++)
{
p=p->next;
if(strcmp(p->data,e)==0)
{
DeleteByPos(L,i);
return 0;
}
}
return -1;
}
2,实现循环双向链表按位置插入
//按位置插入
void InsertByPos(DoubleLoopLink L,int pos,datatype e)
{
if(L==NULL)
{
return;
}
DoubleLoopLink p=L;
DoubleLoopLink q=CreateNode();
for(int i=0;i<pos-1;i++)
{
p=p->next;
}
q->data=e;
q->next=p->next;
q->prev=p;
p->next->prev=q;
p->next=q;
L->len++;
}
3,实现约瑟夫环
LoopLink CreateHead()
LoopLink L=(LoopLink)malloc(sizeof(Node));
if(L==NULL)
{
return NULL;
}
L->len=0;
L->next=L;
return L;
oopLink CreateNode()
LoopLink p=(LoopLink)malloc(sizeof(Node));
if(p==NULL)
{
return NULL;
}
p->data=-1;
p->next=NULL;
return p;
oid InsertRear(LoopLink L,datatype e)
if(L==NULL)
{
return;
}
LoopLink p=L;
LoopLink q=CreateNode();
if(q==NULL)
{
return;
}
while(p->next!=L)
{
p=p->next;
}
q->data=e;
q->next=p->next;
p->next=q;
L->len++;
oid LoopLinkShow(LoopLink L)
if(L->len==0)
{
return;
}
LoopLink p=L;
while(p->next!=L)
{
p=p->next;
printf("%d\t",p->data);
}
printf("\n");
oid Josepho(LoopLink L,int n,int m)
int i,j;
LoopLink p=L;
for(int i=0;i<n;i++)
{
for(j=0;j<m-1;j++)
{
p=p->next;
if(p==L)
{
j--;
}
}
LoopLink q=p->next;
if(q==L)
{
q=L->next;
}
printf("%d\t",q->data);
p->next=q->next;
free(q);
q=NULL;
L->len--;
}
printf("\n");
4,删除链表中的所有结点.
//释放空间
void LoopLinkFree(LoopLink L)
{
if(L->len==0)
{
return;
}
for(int i=0;i<L->len;i++)
{
DeleteRear(L);
}
}
main.c
int main()
{
........
free(L);
L=NULL;
return 0;
}
5,实现单向链表的简单选择排序
//链表选择排序(降序)
void LinkSelectSort(Linklist L)
{
int i,j;
datatype temp;
Linklist p=L;
for(i=0;i<L->len-1;i++)
{
p=p->next;
Linklist q=p;
for(j=i+1;j<L->len;j++)
{
q=q->next;
if(p->data < q->data)
{
temp=q->data;
q->data=p->data;
p->data=temp;
}
}
}
}