您的位置:首页 > 其它

对线性链表的完整操作(1)

2012-08-25 20:40 295 查看
#include <stdio.h>

#include <stdlib.h>

#define MaxSize 50

typedef int ElemType;

///////////////////////////////////////////

typedef struct LNode

{

ElemType data;

struct LNode *next;

}LinkList; //单链表结点类型

/********************创建链表(头插法建表)得到逆序结果**************************/

void CreateListF(LinkList *&L,ElemType a[],int n)

{

LinkList *s;

int i;

L= (LinkList *)malloc(sizeof(LinkList));

L->next=NULL;

for(i=0;i<n;i++)

{

s=(LinkList *)malloc(sizeof(LinkList));

s->data=a[i];

s->next=L->next;

L->next=s;

}

}

/********************创建链表(尾插法建表)得到顺序结果**************************/

void CreateListR(LinkList *&L,ElemType a[], int n)

{

LinkList *s,*r;

int i;

L=(LinkList *)malloc(sizeof(LinkList));

r=L;

for(i=0;i<n;i++)

{

s=(LinkList *)malloc(sizeof(LinkList));

s->data=a[i];

r->next=s;

r=s;

}

r->next=NULL;

}

/*****************c初始化线性链表******************/

void InitList(LinkList *&L)

{

L=(LinkList *)malloc(sizeof(LinkList));

L->next=NULL;

}

/*****************销毁线性链表******************/

void DestroyList(LinkList *&L)

{

LinkList *p=L,*q=p->next;

while(q!=NULL)

{

free(p);

p=q;

q=p->next;

}

free(p); //此时q为NULL,p指向尾结点,释放它

}

/*****************判断线性链表是否为空******************/

int ListEmpty(LinkList *L)

{

return (L->next==NULL);

}

/*****************返回线性链表的长度******************/

int ListLength(LinkList *L)

{

LinkList *p=L;

int n=0;

while(p->next!=NULL)

{

n++;

p=p->next;

}

return n;

}

/*****************输出线性链表******************/

void DispList(LinkList *L)

{

LinkList *p=L->next;

while(p!=NULL)

{

printf("%d ",p->data);

p=p->next;

}

printf("\n");

}

/*****************求线性链表中第i个元素值******************/

int GetElem(LinkList *L,int i,ElemType &e)

{

LinkList *p=L;

int j=0;

while(j<i&&p!=NULL)

{

j++;

p=p->next;

}

if(p==NULL)

{

return 0;

}

else

{

e=p->data;

return 1;

}

}

/*****************按元素值查找线性链表******************/

int LocateElem(LinkList *L,ElemType e)

{

LinkList *p=L->next;

int i=1;

while(p!=NULL&&p->data!=e)

{

p=p->next;

i++;

}

if(p==NULL)

{

return 0;

}

else

{

return i;

}

}

/*****************在线性链表插入元素值******************/

int ListInsert(LinkList *&L,int i,ElemType e)

{

LinkList *p=L,*s;

int j=0;

while(j<i-1&&p!=NULL)

{

j++;

p=p->next;

}

if(p==NULL)

{

return 0;

}

else

{

s=(LinkList *)malloc(sizeof(LinkList));

s->data=e;

s->next=p->next;

p->next=s;

return 1;

}

}

void main()

{

int a[8]={6,9,1,7,3,7,13,5};

LinkList *L;

printf("%s","创建并输出头插法创建线性链表:\n");

CreateListF(L,a,8);

//printf("%s","创建并输出尾插法创建线性链表:\n");

//CreateListR(L,a,8);

DispList(L);

printf("%s","输出元素值为7的位置:");

int e=LocateElem(L,7);

printf("%d\n",e);

printf("%s","插入元素值为67并输出线性链表:\n");

ListInsert(L,2,67);

DispList(L);

}

运行结果为:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: