数据结构与算法单链表的实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;