实验四:单链表的插入和删除

xiaoxiao2021-02-28  110

一、实验目的

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、运行程序、查错。

转载请注明原文地址: https://www.6miu.com/read-2622514.html

最新回复(0)