Bootstrap

数据结构单链表——建立单链表

 0.建立单链表前的工作

#include<stdio.h>
#include<stdlib.h>
//定义结构体
typedef int Elemtype;
typedef struct LNode{
    Elemtype data;    //单链表结点中的数据域,用来存放数据
    LNode *next;      //单链表结点中的指针域,用来存放下一个结点的地址
}LNode,*Linklist;  

1.头插法建立单链表

Linklist Create_head(Linklist &L){
    LNode *s;    //定义s指针
    int x;       //用来保存数据
    L=(LNode*)malloc(sizeof(LNode));   //向内存申请开辟一个LNode类型大小的内存空间,L作为头结点
    L->next=NULL;    //将头指针的next置空
    scanf("%d",&x);
    while(x!=999){    //若输入为999则结束输入
        s=(Linklist)malloc(sizeof(LNode));    //向内存申请为s开辟一个LNode类型大小的内存空间
        s->data=x;            //将x的值赋值给s结点的数据域data
        s->next=L->next;      //s结点指向头结点的下一个结点
        L->next=s;            //再将头结点指向s结点
        scanf("%d",&x);        //再次输入数据
    }
    return L;    //返回L的地址
}

主函数调用

int main(){
	Linklist L;    //定义一个LNode类型的变量L
	Create_head(L);    //头插法创建单链表
	printlist(L);    //打印输出
	return 0;
}

 运行示例 

 

2.尾插法建立单链表

//尾插法建立单链表
Linklist Create_tail(Linklist& L) {
	int x;   
	L = (Linklist)malloc(sizeof(LNode));
	LNode*s,*r=L;    //与头插法不同的是需要定义一个尾指针r,r始终指向单链表中最后一个结点
	scanf("%d",&x);
	while (x!=999)
	{
		s = (LNode*)malloc(sizeof(LNode));
		s->data = x;    
		r->next=s;    //当前的尾结点指向s
		r = s;        //将s的值传给r,目的是将s作为当前的尾结点
		scanf("%d", &x);
	}
	r->next = NULL;    //插入完成后将r->next置空
	return L;
}

主函数调用

int main(){
	Linklist L;    //定义一个LNode类型的变量L
	Create_tail(L);    //尾插法创建单链表
	printlist(L);    //打印输出
	return 0;
}

 运行示例 

 

;