实验内容
1 初始化一个带表头结点的单链表。
2 从表头不断插入结点建立一个带表头结点的单链表。设表中元素的类型为整型,元素值从键盘输入。
3 从表尾不断插入结点建立一个带表头结点的单链表。设表中元素的类型为整型,元素值从键盘输入。
4 打印一个带表头结点的单链表。
5 清空一个带表头结点的单链表。
代码:(只是把各个函数写好,并给出了调用数据,其他根据实验要求改就行了)
#include<stdio.h> #include<stdlib.h> #include<malloc.h> #define M 100 typedef 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; 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);//清空单链表 }
原文地址:http://blog.csdn.net/caduca/article/details/39551891