码迷,mamicode.com
首页 > 其他好文 > 详细

实现单链表

时间:2019-07-05 22:26:35      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:include   com   turn   ext   oid   printf   填充   第一个   lis   

因为在传递函数参数时,使用了引用,所以该程序为C++程序

#include <stdio.h>
#include <stdlib.h>
#define ElemType int
typedef struct LNode{
ElemType data;
struct LNode *next;
int length;
}LNode, *LinkList;
int CreatList(LinkList &L){
L=(LinkList)malloc(sizeof(LNode));
if(L==NULL){printf("创建失败");return 0;}
L->next=NULL;
return 1;
}//创建一个链表的头结点
void ListTailInsert(LinkList &L,ElemType e){
LinkList r,s;
r=L;
s=(LinkList)malloc(sizeof(LNode));
s->data=e;
s->next=NULL;
while(r->next!=NULL){
r=r->next;
}
r->next=s;
}//尾插法填充节点
void ListPrint(LinkList &L){
LinkList p;
int i=0;
p=L->next;
printf("链表为:");
while(p!=NULL){
printf("%d ",p->data);
p=p->next;
i++;
}
printf("\n");
L->length=i;
printf("链表的长度为:%d\n",L->length);
}//打印链表
LNode *GetElem(LinkList &L,int i){
int j=1;
LinkList p=L->next;
if(i<1||i>L->length){
printf("寻找的i的位置无效");
}
while(p!=NULL){
if(j==i){return p;}
p=p->next;
j++;
}
}//查找第i个结点
LNode *LocateElem(LinkList &L,ElemType e){
LinkList p=L->next;
int flag=0;
while(p!=NULL){
if(p->data==e){flag=1;return p;}
p=p->next;
}
if(flag==0){printf("未找到该结点");}
}//按值查找表节点并返回该结点
void ListInsert(LinkList &L,int i,ElemType e){
LinkList s,p;
if(i<0||i>L->length){printf("插入的i的位置无效");}
s=(LinkList)malloc(sizeof(LNode));
s->data=e;
if(i==1){
s->next=L->next;
L->next=s;
}//在第一个结点插入的特殊情况
else{p=GetElem(L,i-1);
s->next=p->next;
p->next=s;}
}//将结点值为e的
void ListDelete(LinkList &L,int i){
LinkList p;
if(i<0||i>L->length){printf("删除的i的位置无效");}
if(i==1){
L->next=L->next->next;
}//在第一个结点删除的特殊情况
else{p=GetElem(L,i-1);
p->next=p->next->next;}
}//删除第i个结点
int main(){
LinkList L;
LinkList q;
LinkList p;
CreatList(L);
ListTailInsert(L,1);
ListTailInsert(L,2);
ListTailInsert(L,3);
ListTailInsert(L,4);
ListTailInsert(L,5);
ListPrint(L);
q=LocateElem(L,2);
printf("%d\n",q->data);
p=GetElem(L,3);
printf("%d\n",p->data);
ListInsert(L,1,6);
ListInsert(L,3,7);
ListPrint(L);
ListDelete(L,1);
ListDelete(L,5);
ListPrint(L);
return 0;
}

下面为运行结果

技术图片

实现单链表

标签:include   com   turn   ext   oid   printf   填充   第一个   lis   

原文地址:https://www.cnblogs.com/Yshun/p/11140924.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!