标签: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