实验内容
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