项目二——建设“单链表”的算法库

问题及代码:

/*2015,烟台大学计算机与控制工程学院
 *作者:桑立
 *完成日期:2015年9月21日
 *问题描述:建设单链表的算法库。算法库包括两个文件: 
  1 头文件:linklist.h,包含定义顺序表数据结构的代码、宏定义、要实现算法的函数的声明; 
  2 源文件:linklist.cpp,包含实现各种算法的函数的定义 
   
  请采用程序的多文件组织形式,建立如上的两个文件,另外再建立一个源文件(如main.cpp),编制main函数,完成相关的测试工作。 
 *输入描述:无
 *输出描述:数据元素
*/
(1)头文件:
#include <stdio.h>
#include <malloc.h>
typedef int ElemType;
typedef struct LNode        //定义单链表结点类型
{
    ElemType data;
    struct LNode *next;     //指向后继结点
} LinkList;

void CreateListF(LinkList *&L,ElemType a[],int n);//头插法建立单链表
void CreateListR(LinkList *&L,ElemType a[],int n);//尾插法建立单链表
void InitList(LinkList *&L);
void DestroyList(LinkList *&L); //销毁单链表
void DispList(LinkList *L) ; //输出单链表
bool ListInsert(LinkList *&L,int i,ElemType e);

(2)源程序:
#include "linklist.h"

void InitList(LinkList *&L)
{
	L=(LinkList * )malloc(sizeof(LinkList));
	L->next=NULL;
}
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;
}
void DestroyList(LinkList *&L) //销毁单链表
{
	LinkList *pre=L,*p=L->next;
	while(p!=NULL)
	{	
		free(pre);
		pre=p;
		p=pre->next;
	}
	free(pre);
}
void DispList(LinkList *L) 
{
	LinkList *p=L->next;
	while(p!=NULL)
	{
		printf("%d ",p->data);
		p=p->next;
	}
	printf("\n ");
}
bool ListInsert(LinkList *&L,int i,ElemType e)
{
	int j=0;
	LinkList *p=L,*s;
	while(j<i-1&&p!=NULL)
	{
		j++;
		p=p->next;
	}
	if(p==NULL)
		return false;
	else
	{
		s=(LinkList * )malloc(sizeof(LinkList));
		s->data=e;
		s->next=p->next;
		p->next=s;
		return true;
	}
}

(3)main函数;
#include "linklist.h"
int main()
{
	LinkList *L1, *L2;
    ElemType a[8]= {7, 9, 8, 2, 0, 4, 6, 3};
    CreateListF(L1, a, 8);
    printf("头插法建表结果:");
    DispList(L1);
    CreateListR(L2, a, 6);
    printf("尾插法建表结果:");
    DispList(L2);
    DestroyList(L1);
    DestroyList(L2);
    LinkList *L;
    InitList(L);
    ListInsert(L, 1, 15);
    ListInsert(L, 1, 10);
    ListInsert(L, 1, 5);
    ListInsert(L, 1, 20);
    DispList(L);
    DestroyList(L);
	
    return 0;
}

运行结果:

项目二——建设“单链表”的算法库_第1张图片

知识点总结:

运用算法库,更简洁,方便。

学习心得:

一定要建立项目。。。。

你可能感兴趣的:(项目二——建设“单链表”的算法库)