单链表操作(数据结构实验一)

来源:互联网 发布:learnx mac 编辑:程序博客网 时间:2024/06/07 19:55

          实验内容

1 初始化一个带表头结点的单链表。
2 从表头不断插入结点建立一个带表头结点的单链表。设表中元素的类型为整型,元素值从键盘输入。
3 从表尾不断插入结点建立一个带表头结点的单链表。设表中元素的类型为整型,元素值从键盘输入。
4 打印一个带表头结点的单链表。
5 清空一个带表头结点的单链表。


代码:(只是把各个函数写好,并给出了调用方式,其他根据实验要求改就行了)

#include<stdio.h>#include<stdlib.h>#include<malloc.h>#define M 100typedef int Etype; //定义单链表结点值的类型为整型typedef struct Node{    Etype data;              //单链表中的数据域    struct Node *link;          //单链表的指针域}Node;typedef Node *List;      //定义单链表List BuildList1();List BuildList2();void PrintList(List first);void clear(List *first);//头插法建立链表List BuildList1(){    Node *L;    Etype x,n;    L = (Node *)malloc(sizeof(Node));   //申请头结点空间    L->link = NULL;                      //初始化一个空链表    printf("请输入元素个数:\n");    scanf("%d",&n);   printf("请输入元素:\n");                  //x为链表数据域中的数据    for(int i=0;i<n;i++)    {        scanf("%d",&x);        Node *p;        p = (Node *)malloc(sizeof(Node));   //申请新的结点        p->data = x;                     //结点数据域赋值        p->link = L->link;                    //将结点插入到表头L-->|2|-->|1|-->NULL        L->link = p;    }    return L;}//尾插法建立链表List BuildList2(){    Node *L,*r;    Etype n,x;    L = (Node *)malloc(sizeof(Node));   //申请头结点空间    L->link = NULL;                  //初始化一个空链表    printf("请输入元素个数:\n");    scanf("%d",&n);    r = L;                          //r始终指向终端结点,开始时指向头结点    printf("请输入元素:\n");    for(int i=0;i<n;i++)    {        scanf("%d",&x);        Node *p;        p = (Node *)malloc(sizeof(Node));   //申请新的结点        p->data = x;                     //结点数据域赋值        r->link = p;                 //将结点插入到表头L-->|1|-->|2|-->NULL        r = p;    }    r->link = NULL;    return L;}//输出链表void PrintList(List first){    Node *Li;    if(first==NULL)    {      printf("链表为空!\n");      return;    }    Li=first->link;    while(Li!=NULL)    {        printf("%d ",Li->data);        Li=Li->link;    }    printf("\n");}//清空链表void clear(List *first){    Node *p=*first;    while(*first)    {        p=(*first)->link;        free(*first);        *first=p;    }}int main(){    Node *L;    L=BuildList1();        //调用BuiltdList1(前插法)建立单链表算法    PrintList(L); //打印单链表    clear(&L);//清空单链表    L=BuildList2();                      //调用BuiltdList2(后插法)建立单链表算法    PrintList(L);          //打印单链表    clear(&L);//清空单链表}


0 0
原创粉丝点击