一、实验目的
1、 会定义单链表的结点类型。
2、 会对单链表的一些基本操作和具体的函数定义。
3、 掌握单链表的插入和删除算法。
二、实验内容
该程序实现了单链表的插入和删除。
三、实验步骤
1、启动VC++6.0
2、输入程序
3、
(1)Link.h
typedef int ElemType;
typedef struct LNode
{
ElemType data;
LNode *next;
}*LinkList;
void CreateList(LinkList &L,int n);
void ListInsert(LinkList &L,int i,ElemType e);
void ListDelete(LinkList &L,int i,ElemType &e);
void printList(LinkList L);
(2)linkc.cpp
#include<stdio.h>
#include<stdlib.h>
#include "link.h"
void CreateList(LinkList &L,int n)
{ // 逆位序(插在表头)输入n个元素的值,建立带表头结构的单链线性表L
int i;
LinkList p;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL; // 先建立一个带头结点的单链表
printf("请输入%d个数据\n",n);
for(i=n;i>0;--i)
{
p=(LinkList)malloc(sizeof(LNode)); // 生成新结点
scanf("%d",&p->data); // 输入元素值
p->next=L->next; // 插入到表头
L->next=p;
}
}
void ListInsert(LinkList &L,int i,ElemType e)
{
int j;
LinkList p,s;
p=L;j=0;
while(p&&j<i-1)
{
p=p->next;++j;
}
if(!p||j>i-1) printf("错误");
s=(LinkList)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
}
void ListDelete(LinkList &L,int i,ElemType &e)
{
int j;
LinkList p,q,s;
p=L;j=0;
while(p->next&&j<i-1)
{
p=p->next;++j;
}
if(!(p->next||j>i-1)) printf("错误");
q=p->next;
p->next=q->next;
e=q->data;
free(q);
}
void printList(LinkList L)
{
LinkList p;
for(p=L->next;p!=NULL;p=p->next)
printf("%d ",p->data);
}
(3)Linkmain.cpp
#include<stdio.h>
#include "link.h"
void main()
{
int n=5;
int i,j;
ElemType e;
LinkList L;
CreateList(L,n); // 逆位序输入n个元素的值
printf("L="); // 输出链表Lb的内容
printList(L);
printf("请输入要插入元素的位置:");
scanf("%d",&i);
printf("请输入要插入的元素:");
scanf("%d",&e);
ListInsert(L,i,e);
scanf("插入后的L=:");
printList(L);
printf("请输入要删除元素的位置:");
scanf("%d",&j);
ListDelete(L,j,e);
scanf("删除后的L=:");
printList(L);
}
4、运行程序、查错。