C语言单链表和双链表的创建和输出

来源:互联网 发布:淘宝银座365是正品吗 编辑:程序博客网 时间:2024/06/05 20:45

本文将描述C语言实现单向链表和双向链表的创建、输出操作方法


单向链表

单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始;链表是使用指针进行构造的列表;又称为结点列表,因为链表是由一个个结点组装起来的;其中每个结点都有指针成员变量指向列表中的下一个结点;
列表是由结点构成,head指针指向第一个成为表头结点,而终止于最后一个指向nuLL的指针。

程序实现如下:

#include <stdio.h>#include <stdlib.h>typedef struct student {    int num;    struct student *Next;}*LinkList;struct student *CreatList(int n){    int i,a;    LinkList p1,p2,head;    head = NULL;    printf("请输入元素值:\n");    for(i=0;i<n;i++){        p1 = (struct student *)malloc(sizeof(struct student));        scanf("%d",&a);        p1->num = a;        if(head == NULL){               head = p1;        }        else{            p2->Next =p1;        }        p2 = p1;     }     p1->Next = NULL;    return head;}int main(int argc, char *argv[]) {    int n;    LinkList p;    printf("请输入节点个数:\n");    scanf("%d",&n);    p = CreatList(n);    printf("该链表为:\n");    while(p!=NULL){        printf("%d\t",p->num);        p = p->Next;    }    getch();    return 0;}

输出窗口为:
窗口如下

双向链表

双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。

程序实现如下:

#include <stdio.h>#include <stdlib.h>#include <malloc.h>typedef struct student {    int num;    struct student *Prior,*Next;}*LinkList;struct student *CreatList(int n){    int i;    LinkList p1,p2,head;    head = (LinkList)malloc(sizeof(struct student));    head->num = 0;    head->Prior = NULL;    head->Next = NULL;    p2 = head;    printf("请输入元素值:\n");    for(i=0;i<n;i++){        p1 = (LinkList)malloc(sizeof(struct student));        scanf("%d",&(p1->num));        p2->Next = p1;          p1->Prior = p2;        p1->Next = NULL;         p2 = p1;         }       p1->Next = NULL;    return head;}int main(int argc, char *argv[]) {    int n;    LinkList p,head;    printf("请输入节点个数:\n");    scanf("%d",&n);    head = CreatList(n);    p = head->Next;    printf("该双向链表为:\n");    while(p){        printf("%d\t",p->num);        p = p->Next;    }    getch();    return 0;}

输出窗口为:
窗口如下

1 0