day6作业
双向链表逆置
//求双链表长度
int len_doublelink(DoubleLinklist L)
{
int count=0;
while(L!=NULL)
{
count++;
L=L->next;
}
return count;
}
//逆置
DoubleLinklist rev_doublelist(DoubleLinklist L)
{
if(NULL==L || L->next==NULL)
return L;
int len=len_doublelink(L);
DoubleLinklist p=L->next;
L->next=NULL;
for(int i=0;i<len-1;i++)
{
p->prev=NULL;
DoubleLinklist t=p;
p=p->next;
t->next=L;
L->prev=t;
L=t;
}
return L;
}
day6函数
双向循环链表操作
//创建
DoubleLinklist create()
{
DoubleLinklist node=(DoubleLinklist)malloc(sizeof(struct Node));
if(NULL==node)
return NULL;
strcpy(node->data,"");
node->prev=node;
node->next=node;
}
//头插
DoubleLinklist insert_head(datatype e,DoubleLinklist L)
{
DoubleLinklist s=create();
strcpy(s->data,e);
if(NULL==L)
{
L=s;
return L;
}
else
{
L->prev->next=s;
s->prev=L->prev;
s->next=L;
L->prev=s;
L=s;
return L;
}
}
//遍历
void Output(DoubleLinklist L)
{
if(NULL==L)
return;
DoubleLinklist p=L;
printf("顺序遍历\n");
do
{
printf("%s\t",p->data);
p=p->next;
}while(p!=L);
puts("");
p=p->prev;
printf("逆序遍历\n");
do
{
printf("%s\t",p->data);
p=p->prev;
}while(p->next!=L);
puts("");
}
//尾插
DoubleLinklist insert_rear(datatype e,DoubleLinklist L)
{
DoubleLinklist s=create();
strcpy(s->data,e);
if(NULL==L)
{
L=s;
return L;
}
L->prev->next=s;
s->prev=L->prev;
s->next=L;
L->prev=s;
return L;
}
//头删
DoubleLinklist delete_head(DoubleLinklist L)
{
if(NULL==L)
return NULL;
else if(L->next==L)
{
free(L);
L=NULL;
return NULL;
}
else
{
DoubleLinklist p=L->next;
strcpy(L->data,p->data);
L->next=p->next;
p->next->prev=L;
free(p);
p=NULL;
return L;
}
}
//尾删
DoubleLinklist delete_rear(DoubleLinklist L)
{
if(NULL==L)
return NULL;
else if(L->next==L)
{
free(L);
L=NULL;
return NULL;
}
else
{
DoubleLinklist p=L->prev;
L->prev=p->prev;
p->prev->next=L;
free(p);
p=NULL;
return L;
}
}
循环队列操作
Queuelist *create()//创建
{
Queuelist *p=(Queuelist *)malloc(sizeof(Queuelist));
if(NULL==p)
return NULL;
p->front=p->rear=0;
return p;
}
void Output(Queuelist *p)//遍历
{
if(NULL==p)
{
return;
}
for(int i=p->front;i!=p->rear;i=(i+1)%MAXSIZE)
{
printf("%d\t",p->data[i]);
}
puts("");
}
Queuelist *push_qu(datatype e,Queuelist *p)//入队
{
if(NULL==p || p->front==(p->rear+1)%MAXSIZE)
{
return NULL;
}
p->data[p->rear]=e;
p->rear=(p->rear+1)%MAXSIZE;
return p;
}
Queuelist *pop_qu(Queuelist *p)//处队
{
if(NULL==p || p->front==p->rear)
return NULL;
printf("出队的是%d\n",p->data[p->front]);
p->front=(p->front+1)%MAXSIZE;
return p;
}
int len_loop(Queuelist *p)//队列长度
{
if(NULL==p)
return -1;
int len=(MAXSIZE+p->rear-p->front)%MAXSIZE;
return len;
}