数据结构day3作业

1.双向循环链表

head.h

#ifndef __HEAD_H__
#define __HEAD_H__
#include 
#include 
#include 
typedef char type;
typedef struct Node
{
	type data;
	struct Node* next;
	struct Node* prev;
}*Llist;

Llist create();

void output(Llist head);

Llist head_insert(Llist head,type element);

Llist head_delete(Llist head);

Llist tail_insert(Llist head,type element);

Llist tail_delete(Llist head);
#endif

test.c

#include "head.h"
//创建链表
Llist create()
{
	Llist p=(Llist)malloc(sizeof(struct Node));
	p->data=0;
	p->next=p;
	p->prev=p;
	return p;
}
//输出
void output(Llist head)
{
	if(head==NULL)
	return;
	Llist p=head;
	while(p->next!=head)
	{
	printf("%c ",p->data);
	p=p->next;
	}
	printf("%c ",p->data);
	putchar(10);
}

//头插
Llist head_insert(Llist head,type element)
{
	Llist p=create();
	p->data=element;
	if(head==NULL)
		head=p;
	else
	{
		p->next=head;
		Llist rear=head;
		while(rear->next!=head)
		{
			rear=rear->next;
		}
		rear->next=p;
		p->prev=rear;
		head=p;
	}
	return head;
}

//头删
Llist head_delete(Llist head)
{
	if(head==NULL)
	{
		return NULL;
	}
	if(head->next==head)
	{
		free(head);
		head=NULL;
		return head;
	}

	Llist rear=head;
	while(rear->next!=head)
	{
		rear=rear->next;
	}
	Llist del=head;
	head=head->next;
	free(del);
	del=NULL;
	rear->next=head;
return head;
}

//尾插
Llist tail_insert(Llist head,type element)
{
	if(head==NULL)
	{
	head=head_insert(head,element);
	return head;
	}
	Llist p=head;
	while(p->next!=head)
	{
		p=p->next;
	}
	Llist s=create();
	s->data=element;
	p->next=s;
	s->next=head;
	s->prev=p;
	head->prev=s;
	return head;
}

//尾删
Llist tail_delete(Llist head)
{
	if(head==NULL)
		return NULL;
	if(head->next==head)
	{
		free(head);
		head=NULL;
		return head;
	}
	Llist p=head;
	while(p->next!=head)
	{
		p=p->next;
	}
	p->prev->next=head;
	head->prev=p->prev;
	free(p);
	p=NULL;
	return head;
}

main.c

#include "head.h"
int main(int argc, const char *argv[])
{
	Llist head=NULL;
	int n;
	type element;
	//头插
	printf("输入头插次数:");
	scanf("%d",&n);
	for(int i=0;i

2.双向链表的尾插

Llist tail_delete(Llist head)
{
	if(head==NULL)
		return NULL;
	if(head->next==NULL)
	{
		free(head);
		head=NULL;
		return head;
	}
	Llist p=head;
	while(p->next!=NULL)
	{
		p=p->next;
	}
	p->prev->next=NULL;
	free(p);
	p=NULL;
	return head;
}

你可能感兴趣的:(数据结构,算法)