您的位置:首页 > 编程语言 > C语言/C++

单向链表的实现(c语言)

2018-03-17 18:24 309 查看
单链表中结点类型的描述如下:

typedef struct LNode{ //单链表结点类型
ElemType data; //数据域
LNode *next; //指针域
} LNode, *LinkList;

用头插法创建链表:
LinkList CreatList1(LinkList &L){
//头插法,从表尾到表头逆向建立单链表,每次都插在头节点后,
//链表中元素的顺序是输入的数据元素的逆序
LNode *s;
int x;
L = (LinkList)malloc(sizeof(LNode)); //创建头节点
L->next = NULL; //初始为空链表
scanf("%d", &x); //输入结点的值
while(x != -1){ //输入-1表示结束,可根据实际需求修改
s = (LNode*)malloc(sizeof(Node));//创建新结点
s->data = x;
s->next = L->next;
L->next = s; //将新结点插入表中,L为头指针
scanf("%d", &x);
}
return L;
}

用尾插法创建链表:
LinkList CreatList2(LinkList &L){
//尾插法,从表尾到表头正向建立单链表,每次都在表尾插入元素
//链表中元素的顺序和输入顺序一致
int x; //设元素类型为整型,可根据实际需求修改
L = (LinkList)malloc(sizeof(LNode));
LNode *s, *r = L; // r为表尾元素
scanf("%d", &x); //输入结点的值
while(x != -1){ //输入-1表示结束,可根据实际需求修改
s = (LNode*)malloc(sizeof(Node));//创建新结点
s->data = x;
r->next = s;
L = s; //r指向新的表尾结点
scanf("%d", &x);
}
r->next = NULL; //尾结点指针置为空
return L;
}

通过序号查找结点值:
LNode *GetElem(LinkList L, int i){
//取出单链表L(带头结点)中第i个位置的结点指针
int j = 1; //计数,初始为1
LNode *p = L->next; //头结点指针赋给p
if(i == 0) //若i等于0,返回头结点
return L;
if(i < 1) //若i无效,返回NULL
return NULL;
while(p && j < i){ //从第1个结点开始找
p = p->next;
j++;
}
return p; //返回第i个结点的指针
//若i大于表长,p=NULL,返回p即可
} 按值查找结点:
LNode *LocateElem(LinkList L, ElemType e){
//查找单链表L(带头结点)中数据域为e的结点指针,否则返回NULL
LNode *p = L->next;
//从第1个结点开始查找数据域为e的结点
while(p != NULL && p->data != e){
p = p->next;
}
return p;//找到后返回该结点指针,否则返回NULL
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: