码迷,mamicode.com
首页 > 其他好文 > 详细

双向链表

时间:2017-07-24 00:07:07      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:let   des   一个   locate   insert   malloc   链表   创建   printf   

#include "stdafx.h"
#include <malloc.h>
typedef char ElemType;
typedef struct DNode
{
	ElemType data;
	struct DNode * prior;
	struct DNode * next;
}DLinkList;
void InintList(DLinkList * &L)
{
	L = (DLinkList *)malloc(sizeof(DLinkList));
	L->next = L->prior = NULL;
}
void DestroyList(DLinkList * &L)
{
	DLinkList *p = L;
	DLinkList *q = p->next;
	while (q!=NULL)
	{
		free(p);
		p = q;
		q = p->next;
	}
	free(p);
}
int ListEmpty(DLinkList *L)
{
	return(L->next == NULL);
}
int ListLength(DLinkList *L)
{
	DLinkList *p = L;
	int i = 0;
	while (p->next!=NULL)
	{
		i++;
		p = p->next;
	}
	return i;
}
void DispList(DLinkList *L)
{
	DLinkList *p = L->next;
	while (p!=NULL)
	{
		printf_s("%c", p->data);
		p = p->next;
	}
	printf_s("\n");
}
int GetElem(DLinkList *L,int i,ElemType &e)
{
	int j = 0;
	DLinkList *p = L;
	while (p!=NULL && j<i)
	{
		p = p->next;
		j++;
	}
	if (p == NULL)
	{
		return 0;
	}
	e = p->data;
	return 1;
}
int LocateElem(DLinkList *L, ElemType e)
{
	int j = 0;
	DLinkList *p = L->next;
	while (p!=NULL && p->data!=e )
	{
		j++;
		p = p->next;
	}
	if (p == NULL)
	{
		return 0;
	}
	else
	{
		return j;
	}
}
int ListInsert(DLinkList * &L, int i, ElemType e)
{
	/*
		找到第i个元素的前一个元素
		不存在第i个元素则为NULL返回0
		找到第i个元素,则进行创建节点插入操作,返回0,
	*/
	int j = 0;
	DLinkList *p = L;
	DLinkList *s;
	while (p!=NULL &&j<i-1)
	{
		p = p->next;
		j++;
	}
	if (p == NULL)
	{
		return 0;
	}
	else
	{
		s = (DLinkList *)malloc(sizeof(DLinkList));
		s->data = e;
		s->next = p->next;
		// 判断是否插入末尾元素上。
		if (p->next != NULL)
		{
			p->next->prior = s;
		}
		s->prior = p;
		p->next = s;
	}
}

int ListDelete(DLinkList *&L, int i, ElemType &e)
{
	/*
	找到第个元素的前一个元素
	判断是否为空,不为空这删除,为空则返回0
	如果是最后一个元素
	*/
	int j = 0;
	DLinkList *p = L;
	DLinkList *q;
	while (p != NULL &&j<i-1)
	{
		p = p->next;
		j++;
	}

	if (p == NULL) // 为什么要判断是否为NULL,对空进行取值会BUG
	{
		return 0;
	}
	else
	{
		q = p->next;
		if (q == NULL)
		{
			return 0;
		}
		else
		{
			e = q->data;
			p->next = q->next;
			if (q->next != NULL)
			{
				q->next->prior = p;
			}
			free(q);
			return 1;
		}
	}
}

  

双向链表

标签:let   des   一个   locate   insert   malloc   链表   创建   printf   

原文地址:http://www.cnblogs.com/tuqunfu/p/7226398.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!