手机版

单链表的插入和删除实验报告

时间:2025-07-15   来源:未知    
字号:

单链表的插入和删除实验报告

一、 目的:

了解和掌握线性表的逻辑结构和链式存储结构,掌握单链表的基本算法及相关的时间性能分析。

二、 要求:

建立一个数据域定义为字符串的单链表,在链表中不允许有重复的字符串;根据输入的字符串,先找到相应的结点,后删除之。

三、 实验内容:

1、分析、理解程序。

程序的主要功能是实现对数据域为字符串的单链表的建立、查找、删除、插入和浏览。 其中链表的建立为头插入法。 链表建立示意图: (a)、删除hat:

(b)、插入charu:

2、修改程序:

1) 增加插入结点的功能。

如在jat后插入charu,程序运行结果为:

2) 将建立链表的方法改为头插入法。

程序源代码:

===================main.cpp=====================

#include <stdlib.h> #include <string.h> #include <stdio.h> #include <ctype.h> #include "linkList.h"

void main() { char ch[10],num[10],ch1[10];

}

L=CreateList(); //用尾插入法建立单链表,返回头指针 PrintList(L); //遍历链表输出其值

printf(" Delete node (y/n):"); //输入"y"或"n"去选择是否删除结点 scanf("%s",num);

if(strcmp(num,"y")==0 || strcmp(num,"Y")==0) { }

printf("the position after:"); scanf("%s",ch1);

InsertList(L,ch1); PrintList(L);

FreeAll(L); //删除所有结点,释放内存

printf("Please input Delete_data:");

scanf("%s",ch); //输入要删除的字符串 DeleteList(L,ch); PrintList(L);

===================linkList.cpp=====================

#include "linkList.h" #include <stdlib.h> #include <string.h> #include <stdio.h> #include <ctype.h>

//==========用尾插入法建立带头结点的单链表============

LinkList CreateList()

}

//==========按值查找结点,找到则返回该结点的位置,否则返回NULL==========

LinkList LocateNode(LinkList L,ElemType key) {

LNode *p;

p=L->next; //从开始结点比较

while(p&&strcmp(p->data,key)!=0) //直到p为NULL或p-> data为key止

p=p->next; //扫描下一个结点 while(strcmp(key,"#")!=0) {

t=LocateNode(L,key);

if(t==NULL) { s=(LinkList)malloc(sizeof(LNode));

strcpy(s->data,key); s->next=r->next;

ElemType key; LNode *r,*s,*t;

LinkList L=(LinkList)malloc(sizeof(LNode));//生成头结点 r=L;

r->next=NULL;

printf("Input # to end\n"); //输入“#”代表输入结束 printf("Please input LNode data:\n"); scanf("%s",key);

r->next=s; }

printf("Please input LNode data:\n"); scanf("%s",key);

}

return L;

return p; //若p=NULL则查找失败,否则p指向找到的值为key的结点 }

//==========删除带头结点的单链表中的指定结点=======

void DeleteList(LinkList L,ElemType key) { LNode *p,*r,*q=L;

p=LocateNode(L,key); //按key值查找结点的

if(p==NULL )

{ }

//若没有找到结点,退出

printf("position error"); exit(0);

while(q->next!=p) //p为要删除的结点,q为p的前结点 q=q->next;

r=q->next; q->next=r->next;

free(r); //释放结点 }

//==========插入元素到带头结点的单链表中的指定结点前=======

void InsertList(LinkList L,ElemType key) { ElemType input;

LNode *s,*r;

printf("input the Insert_data:"); scanf("%s",input);

r=LocateNode(L,key);

s=(LinkList)malloc(sizeof(LNode));

strcpy(s->data,input);

s->next=r->next; r->next=s; }

//===========在屏幕上输出所有节点元素==========

void PrintList(LinkList L) { LNode *p=L->next; }

//==========删除所有结点,释放空间===========

void FreeAll(LinkList L) { LNode *r,*p=L; }

while(p->next) { r=p->next; free(p); p=r; }

free(p); while(p) { }

printf("\n");

printf("%s, ",p->data); p=p->next;

===================commom.h=====================

#ifndef _COMM_H_ #define _COMM_H_

#define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2

typedef int Status;

#endif

===================linkList.h=====================

#ifndef _LINK_LIST_H_ #define _LINK_LIST_H_

#include "common.h"

typedef char ElemType[10];

typedef struct LNode{

ElemType data; //数据域 struct LNode *next; //指针域

}LNode, *LinkList;

LinkList CreateList();

LinkList LocateNode(LinkList L,ElemType key); void DeleteList(LinkList L,ElemType key); void InsertList(LinkList L,ElemType key); void PrintList(LinkList L); void FreeAll(LinkList L); #endif

实验结果:

调试程序,并设计输入数据(如:bat,cat,eat,fat,hat,jat,lat,mat,#),测试程序的如下功能:不允许重复字符串的插入;根据输入的字符串,找到相应的结点并删除。 输入数据(bat,cat,eat,fat,hat,jat,lat,mat,#) 程序运行结果:

如删除hat程序运行结果为:

…… 此处隐藏:1335字,全部文档内容请下载后查看。喜欢就下载吧 ……
单链表的插入和删除实验报告.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
    ×
    二维码
    × 游客快捷下载通道(下载后可以自由复制和排版)
    VIP包月下载
    特价:29 元/月 原价:99元
    低至 0.3 元/份 每月下载150
    全站内容免费自由复制
    VIP包月下载
    特价:29 元/月 原价:99元
    低至 0.3 元/份 每月下载150
    全站内容免费自由复制
    注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
    × 常见问题(客服时间:周一到周五 9:30-18:00)