数据结构 一

链表的基本功能

List.h程序

#ifndef  _LIST_H_
#define  _LIST_H_
typedef enum{TRUE,FLAST,ERROR}BOOL;
typedef int Data;
typedef struct _node
{
	Data data;
	struct _node *next;
}Node;
typedef struct _list
{
	Node *head;
}List;
//创建链表
List *CreateList();
//销毁链表
void Destroy(List *pa);
//头插结点
BOOL Insert_Head(List *pa,Data data);
//尾插结点
BOOL Insert_Last(List *pa,Data data);
//特殊位置插入结点
BOOL Insert_Pos(List *pa,int pos,Data data);
//删除某位置的结点
BOOL Detele(List *pa,int pos);
//按内容删除结点
BOOL Detele_Data(List *pa,Data data);
//链表逆序
void Reverse(List *pa);
//打印函数
void Display(List *pa);
#endif// _LIST_H_

List.c程序

#include "List.h"
#include <stdlib.h>
#include <stdio.h>

List *CreateList()
{
	List *pa=(List *)malloc(sizeof(List)/sizeof(char) );
	if(NULL==pa)
		return NULL;
	pa->head=(Node *)malloc(sizeof(Node)/sizeof(char) );
	if(NULL==pa->head)
	{
		free(pa);
		return NULL;
	}
	pa->head->next=NULL;
	
	return pa;
} 
BOOL Insert_Head(List *pa,Data data)
{
	Node *node=(Node *)malloc(sizeof(Node)/sizeof(char) );
	if(NULL==node)
		return ERROR;
	node->data=data;
	node->next=pa->head->next;
	pa->head->next=node;
	
	return TRUE;
}
BOOL Insert_Last(List *pa,Data data)
{
	Node *node=(Node *)malloc(sizeof(Node)/sizeof(char) );
	if(NULL==node)
		return ERROR;
	node->data=data;
	node->next=NULL;
	Node *temp=pa->head;
	while(temp->next)
	{
		temp=temp->next;
	}
	temp->next=node;
}
BOOL Insert_Pos(List *pa,int pos,Data data)
{
	if(NULL==pa||pos<0)
		return ERROR;
	Node *temp=pa->head;
	int i;
	for(i=0;i<pos-1;i++)
	{
		temp=temp->next;
		if(temp==NULL)
		{
			printf("你已越界%d\n",pos);
			return ERROR;	
		}
	}
	
	Node *node=(Node *)malloc(sizeof(Node)/sizeof(char) );
	if(NULL==node)
		return ERROR;
	node->data=data;
	node->next=temp->next;
	temp->next=node;
	return TRUE;
	
}
BOOL Detele(List *pa,int pos)
{
	if(NULL==pa)
		return ERROR;
	Node *temp=pa->head;
	int i;
	for(i=0;i<pos-1;i++)
	{
		temp=temp->next;
		if(temp==NULL||temp->next==NULL)
		{
			printf("你已越界%d\n",pos);
			return ERROR;	
		}
	}
	Node *p=temp->next;
	temp->next=p->next;
	
	free(p);
	return TRUE;
}
BOOL Detele_Data(List *pa,Data data)
{
	if(NULL==pa)
		return ERROR;
	Node *temp=pa->head;
	while(temp->next)
	{
		if(temp->next->data==data)
		{
			Node *p=temp->next;
			temp->next=p->next;
			
			free(p);
			return FLAST;
		}
		temp=temp->next;
	}
	return TRUE;
}
void Reverse(List *pa)
{
	if(NULL==pa||NULL==pa->head
	   ||NULL==pa->head->next||NULL==pa->head->next->next)
		return ;
	Node *pre=pa->head->next;
	Node *cur=pre->next;
	Node *temp;
	while(cur)
	{
		temp=cur->next;
		cur->next=pre;
		pre=cur;
		cur=temp;
	}
	pa->head->next->next=NULL;
	pa->head->next=pre;
	
		
}
void Display(List *pa)
{
	if(NULL==pa)
		return ;
	Node *temp=pa->head->next;
	while(temp)
	{
		printf("%-4d",temp->data);
		temp=temp->next;
	}
	printf("\n");
}

void Destroy(List *pa)
{
	if(NULL==pa)
		return;
	Node *temp=pa->head;
	while(temp->next)
	{
		Node *p=temp->next;
		temp->next=p->next;
		free(p);
	}
	free(pa->head);
	free(pa);
	
}

猜你喜欢

转载自blog.csdn.net/qq_41936758/article/details/84889507