单链表的插入和删除实验报告
scanf("%s",ch); ch);
PrintList(L);
}
printf("the position after:");
scanf("%s",ch1);
InsertList(L,ch1);
PrintList(L);
FreeAll(L); //删除所有结点,释放内存
===================linkList.h=====================
#ifndef _LINK_LIST_H_
#define _LINK_LIST_H_
#include "common.h"
typedef char ElemType[10];
typedef struct LNode{
s->next=r->next;
r->next=s;
}
//===========在屏幕上输出所有节点元素==========
void PrintList(LinkList L)
{
LNode *p=L->next;
while(p)
{
printf("%s, ",p->data);
p=p->next;
}
printf("\n");
}
===================linkList.cpp=====================
#include "linkList.h"
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <ctype.h>
//==========用尾插入法建立带头结点的单链表============
}
//==========删除所有结点,释放空间===========
void FreeAll(LinkList L)
{
LNode *r,*p=L;
while(p->next)
{r=p->next;
free(p);
p=r;
}
free(p);
}
===================commom.h=====================
void DeleteList(LinkList L,ElemType key)
{
LNode *p,*r,*q=L;
p=LocateNode(L,key); //按key值查找结点的
if(p==NULL )//若没有找到结点,退出
{
printf("position error");
exit(0);
}
s->next=r->next;
r->next=s;
}
printf("Please input LNode data:\n");
scanf("%s",key);
}
return L;
}
//==========按值查找结点,找到则返回该结点的位置,否则返回NULL==========
LinkList LocateNode(LinkList L,ElemType key)
#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
ElemType data; //数据域
struct LNode *next; //指针域
}LNode, *LinkList;
LinkList CreateList();
LinkList LocateNode(LinkList L,ElemType key);
void DeleteList(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);
printf("Please input LNode data:\n");
scanf("%s",key);
while(strcmp(key,"#")!=0)
{
t=LocateNode(L,key);
if(t==NULL)
{
s=(LinkList)malloc(sizeof(LNode));
strcpy(s->data,key);
输入数据(bat,cat,eat,fat,hat,jat,lat,mat,#)
程序运行结果:
如删除hat程序运行结果为:
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)
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <ctype.h>
#include "linkList.h"
void main()
{
char ch[10],num[10],ch1[10];
LinkList L;
L=CreateList(); //用尾插入法建立单链表,返回头指针
其中链表的建立为头插入法。
链表建立示意图:
(a)、删除hat:
(b)、插入charu:
2、修改程序:
1)增加插入结点的功能。
如在jat后插入charu,程序运行结果为:
2)将建立链表的方法改为头插入法。
程序源代码:
===================main.cpp=====================
{
LNode *p;
p=L->next; //从开始结点比较
while(p&&strcmp(p->data,key)!=0) //直到p为NULL或p-> data为key止
p=p->next; //扫描下一个结点
return p; //若p=NULL则查找失败,否则p指向找到的值为key的结点
}
//==========删除带头结点的单链表中的指定结点=======
void InsertList(LinkList L,ElemType key);
void PrintList(LinkList L);
void FreeAll(LinkList L);
#endif
实验结果:
调试程序,并设计输入数据(如:bat,cat,eat,fat,hat,jat,lat,mat,#),测试程序的如下功能:不允许重复字符串的插入;根据输入的字符串,找到相应的结点并删除。
单链表的插入和删除实验报告
一、目的:
了解和掌握线性表的逻辑结构和链式存储结构,掌握单链表的基本算法及相关的时间性能分析。
二、要求:
建立一个数据域定义为字符串的单链表,在链表中不允许有重复的字符串;根据输入的字符串,先找到相应的结点,后删除之。
三、实验内容:
1、分析、理解程序。
程序的主要功能是实现对数据域为字符串的单链表的建立、查找、删除、插入和浏览。
LinkList CreateList()
{
ElemType key;
LNode *r,*s,*t;
LinkList L=(LinkList)malloc(sizeof(LNode));//生成头结点
r=L;
r->next=NULL;
printf("Input # to end\n"); //输入“#”代表输入结束
PrintList(L); //遍历链表输出其值
printf(" Delete node (y/n):"); //输入"y"或"n"去选择是否删除结点
scanf("%s",num);
if(strcmp(num,"y")==0 || strcmp(num,"Y")==0)
{
printf("Please input Delete_data:");