单链表的建立与输出

来源:互联网 发布:ps4数据库损坏 编辑:程序博客网 时间:2024/06/05 03:13

         单链表可以用头插法建立,也可以用尾插法建立。然而头插法虽然操作简单一点,顺序却与输入顺序相反,尾插法虽然操作复杂一点,但是顺序却与输入顺序一致,所以建议使用尾插法

一、头插法建立链表

1、不用函数

代码:

#include<stdio.h>#include <malloc.h>typedef struct linknode{    int data;    linknode *next;} Node,*Linklist;//Linklist表示结构体指针int main(void){    Linklist L1=NULL;//建立链表l    Node *p;    for(int i=1; i<=10; i++)//头插法建立链表    {        p=(Linklist)malloc(sizeof(Node));        p->data=i;        p->next=L1;        L1=p;    }    while(L1)    {        printf("%d ",L1->data);        L1=L1->next;;    }    printf("\n");    return 0;}



2、用函数

代码:

#include<stdio.h>#include <malloc.h>typedef struct linknode{    int data;    linknode *next;} Node,*Linklist;//Linklist表示结构体指针Linklist CreateList_front(int n);//头插法建立链表void ShowList(Linklist L);//输出链表内容int main(void){    Linklist L1;    int n;    scanf("%d",&n);    L1=CreateList_front(n);    ShowList(L1);    return 0;}Linklist CreateList_front(int n){    Linklist head=NULL;    Node *p;    int x;    for(int i=0; i<n; i++)//头插法建立链表    {        p=(Linklist)malloc(sizeof(Node));        scanf("%d",&x);        p->data=x;        p->next=head;        head=p;    }    return head;}void ShowList(Linklist L)//输出链表内容{    while(L)    {        printf("%d ",L->data);        L=L->next;    }    printf("\n");}



二、尾插法建立链表

1、不用函数

代码:

#include<stdio.h>#include <malloc.h>typedef struct linknode{    int data;    linknode *next;} Node,*Linklist;//Linklist表示结构体指针int main(void){    Linklist L1;//建立链表l    Node *p,*x;    L1=(Linklist)malloc(sizeof(Node));    p=L1;//将p指向头结点    for(int i=1; i<=10; i++)//尾插法建立链表    {        x=(Linklist)malloc(sizeof(Node));        x->data=i;        p->next=x;        p=x;    }    p->next=NULL;//将最后一个节点的指针域置为空    L1=L1->next;//因为头结点为空,所以指向下一个节点这样才有数据域    while(L1)    {        printf("%d ",L1->data);        L1=L1->next;;    }    printf("\n");    return 0;}



2、用函数

代码:

#include<stdio.h>#include <malloc.h>typedef struct linknode{    int data;    linknode *next;} Node,*Linklist;//Linklist表示结构体指针Linklist CreateList_end(int n);//尾插法建立链表void ShowList(Linklist L);//输出链表内容int main(void){    Linklist L1;    int n;    scanf("%d",&n);    L1=CreateList_end(n);    ShowList(L1);    return 0;}Linklist CreateList_end(int n){    Linklist head=(Linklist)malloc(sizeof(Node));    Node *p,*e;    p=head;    int x;    for(int i=0; i<n; i++)//尾插法建立链表    {        e=(Linklist)malloc(sizeof(Node));        scanf("%d",&x);        e->data=x;        p->next=e;        p=e;    }    p->next=NULL;//将链表的最后一个节点的指针域置空    head=head->next;//因为头结点为空,所以所以指向下一个节点这样才有数据域    return head;}void ShowList(Linklist L)//输出链表内容{    while(L)    {        printf("%d ",L->data);        L=L->next;    }    printf("\n");}



原创粉丝点击