您的位置:首页 > 理论基础 > 数据结构算法

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

2014-09-25 15:10 155 查看
实验内容

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;
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);//清空单链表
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: