数据结构与算法单链表的实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单链表的实现

实现单链表的基本操作,必须包括初始化链表(元素为空)、销毁链表、求表长、查找、插入、删除、遍历(打印)等操作。请编写程序,实现上述单链表的基本操作。

注意:1.元素类型可以自定义

2.可以是带头结点的单链表或不带头结点的单链表

#include

#include

#include

typedef int datatype;

typedef struct node

{

datatype data;

struct node *next;

}LNode,*LinkList;

/*

//创建不带头结点的单链表

Linklist Create_LinkList()

{

return NULL;

}

*/

//创建带头结点的单链表

LinkList Create_LinkList()

{

LinkList L=NULL;

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

if(L)

L->next=NULL;

return L;

}

//打印单链表

void Print_LinkList(LinkList H)

{

if(H == NULL)

{

printf("\n");

}

else

{

printf("head-->");

LinkList p=H->next;

while(p!=NULL)

{

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

printf("-->");

p=p->next;

}

printf("\n");

}

}

//销毁单链表

void Destroy_LinkList(LinkList *H) {

LinkList p, q;

p = *H;

while(p)

{

q = p;

p = p->next;

free(q);

}

*H = NULL;

if(*H==NULL)

printf("销毁成功,请退出\n");

else

printf("销毁失败\n");

}

//求表长

int Length_LinkList(LinkList L)

{

LNode *p=L;

int j=0;

while(p->next)

{

p=p->next;

j++;

}

return j;

}

//表长功能实现

void length(LinkList L)

{

int i=0;

i=Length_LinkList(L);

printf("表长:%d\n",i);

}

//查找操作

//1)按序号查找

LNode * Get_LinkList1(LinkList L,int i) {

LNode *p=L;

int j=0;

while(p->next!=NULL&&j

{

p=p->next;

j++;

}

if(j==i)

return p;

else

return NULL;

}

//2)按值查找即定位

int Locate_LinkList2(LinkList L,datatype x)

{

LNode *p=L;

int i=0;

while(p->data!=x)

{

p=p->next;

i++;

}

return i;

}

//查找功能实现

void find(LinkList L)

{

int i,n;

LNode *p,*s;

datatype x;

printf("选择下列功能\n");

printf("\t1)按序号查找\n");

printf("\t2)按值查找即定位\n");

scanf("%d",&i);

switch(i)

{

case 1:

printf("请输入第几个元素:");

scanf("%d",&n);

p=Get_LinkList1(L,n);

if(p==NULL)

printf("查找失败\n");

else

printf("您所查找的元素为:%d\n",p->data);

break;

case 2:

printf("请输入元素值:");

scanf("%d",&x);

i=Locate_LinkList2(L,x);

if(i!=0)

printf("第%d个元素\n",i);

else

printf("查找失败\n");

break;

}

}

//插入

int Insert_LinkList(LinkList L,int i,datatype x) {

LNode *p,*s;

p=Get_LinkList1(L,i-1);

if(p==NULL)

{

printf("参数i错\n");

return 0;

}

else

{

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

s->data=x;

s->next=p->next;

p->next=s;

}

return 1;

}

//插入功能实现

void Insert(LinkList L)

{

LNode *p=L;

datatype x;

相关文档
最新文档