数据结构day6

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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值