编写顺序表的插入和删除算法_(数据结构)1.实现顺序表的各种基本运算的算法 2.实现单链表的各种基本运算的算法...

实验内容

1.编写一个程序sqlist.cpp,实现顺序表的各种基本运算和整体建表算法(假设顺序表的元素类型ElemType为char),并在此基础上设计一个程序exp2-1.cpp完成以下功能。
(1)初始化顺序表L。
(2)依次插入a、b、c、d、e元素。
(3)输出顺序表L。
(4)输出顺序表L的长度。
(5)判断顺序表L是否为空。
(6)输出顺序表L的第3个元素。
(7)输出元素a的位置。
(8)在第4个元素位置上插入f元素。
(9)输出顺序表L。
(10)删除顺序表L的第3个元素。
(11)输出顺序表L。
(12)释放顺序表L。
2.编写一个程序linklist.cpp,实现单链表的各种基本运算和整体建表算法(假设单链表的元素类型ElemType为char),并在此基础上设计一个程序exp2-2.cpp完成以下功能。
(1)初始化单链表h。
(2)依次采用尾插法插入a、b、c、d、e元素。
(3)输出单链表h。
(4)输出单链表h的长度。
(5)判断单链表h是否为空。
(6)输出单链表h的第3个元素。
(7)输出元素a的位置。
(8)在第4个元素位置上插入f元素。
(9)输出单链表h。
(10)删除单链表h的第3个元素。
(11)输出单链表h。
(12)释放单链表h。

代码实现

1、sqlist.cpp

#include 
#include
#include
using namespace std;
typedef char ElemType;
#define Maxsize 50
typedef struct
{
ElemType data[Maxsize];
int length;
}SqList;
void InitList(SqList *&L) //初始化线性表
{
L=(SqList *)malloc(sizeof(SqList)); //分配存放线性表的空间
L->length=0; //置空线性表长度为0
}
void DestroyList(SqList *L) //销毁线性表
{
free(L);
}
bool ListEmpty(SqList *L) //判断线性表是否为空
{
return (L->length==0);
}
int ListLength(SqList *L) //求线性表的长度
{
return (L->length);
}
void DispList(SqList *L) //输出线性表
{
int i;
if(L->length==0) return;
for(i=0;ilength;i++)
printf("%c ",L->data[i]);
printf("\n");
}
bool GetElem(SqList *L,int i,ElemType &e) //求线性表中某个元数的值
{
if(i<1||i>L->length)
return false;
e=L->data[i];
return true;
}
int LocateElem (SqList *L,ElemType e) //按元素值查找
{
int i=0;
while(ilength&&L->data[i]!=e)
i++;
if(i>=L->length)
return 0;
else
return i+1 ;
}
bool ListInsert(SqList *L,int i,ElemType e) //插入数据元素
{
int j;
if(i<1||i>L->length)
return false;
i--;
for(j=L->length;j>i;j--)
L->data[j]=L->data[j-1];
L->data[i]=e;
L->length++;
return true;
}
bool ListDelete(SqList *L,int i,ElemType e)
{
//int j;
if(i<1||i>L->length)
return false;
i--;
e=L->data[i];
for(;ilength-1;i++)
{
L->data[i]=L->data[i+1];
}
L->length--;
return true;
}
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 17

  • 18

  • 19

  • 20

  • 21

  • 22

  • 23

  • 24

  • 25

  • 26

  • 27

  • 28

  • 29

  • 30

  • 31

  • 32

  • 33

  • 34

  • 35

  • 36

  • 37

  • 38

  • 39

  • 40

  • 41

  • 42

  • 43

  • 44

  • 45

  • 46

  • 47

  • 48

  • 49

  • 50

  • 51

  • 52

  • 53

  • 54

  • 55

  • 56

  • 57

  • 58

  • 59

  • 60

  • 61

  • 62

  • 63

  • 64

  • 65

  • 66

  • 67

  • 68

  • 69

  • 70

  • 71

  • 72

  • 73

  • 74

  • 75

  • 76

  • 77

  • 78

  • 79

exp2-1.cpp

#include 
#include
#include
using namespace std;
typedef char ElemType;
#define Maxsize 50
typedef struct
{
ElemType data[Maxsize];
int length;
}SqList;
void InitList(SqList *&L) //初始化线性表
{
L=(SqList *)malloc(sizeof(SqList)); //分配存放线性表的空间
L->length=0; //置空线性表长度为0
}
void DestroyList(SqList *L) //销毁线性表
{
free(L);
}
bool ListEmpty(SqList *L) //判断线性表是否为空
{
return (L->length==0);
}
int ListLength(SqList *L) //求线性表的长度
{
return (L->length);
}
void DispList(SqList *L) //输出线性表
{
int i;
if(L->length==0) return;
for(i=0;ilength;i++)
printf("%c ",L->data[i]);
printf("\n");
}
bool GetElem(SqList *L,int i,ElemType &e) //求线性表中某个元数的值
{
if(i<1||i>L->length)
return false;
e=L->data[i];
return true;
}
int LocateElem (SqList *L,ElemType e) //按元素值查找
{
int i=0;
while(ilength&&L->data[i]!=e)
i++;
if(i>=L->length)
return 0;
else
return i+1 ;
}
bool ListInsert(SqList *L,int i,ElemType e) //插入数据元素
{
int j;
if(i<1||i>L->length)
return false;
i--;
for(j=L->length;j>i;j--)
L->data[j]=L->data[j-1];
L->data[i]=e;
L->length++;
return true;
}
bool ListDelete(SqList *L,int i,ElemType e)
{
//int j;
if(i<1||i>L->length)
return false;
i--;
e=L->data[i];
for(;ilength-1;i++)
{
L->data[i]=L->data[i+1];
}
L->length--;
return true;
}
int main()
{
SqList *L;
ElemType e;
cout< cout< InitList(L);
cout< ListInsert(L,1,'a');
ListInsert(L,2,'b');
ListInsert(L,3,'c');
ListInsert(L,4,'d');
ListInsert(L,5,'e');
cout< DispList(L);
cout< printf("(5)顺序表L为%s\n",(ListEmpty(L)?"空":"非空"));
GetElem(L,3,e);
cout< cout< cout< ListInsert(L,4,'f');
cout< DispList(L);
cout< ListDelete(L,3,e);
cout< DispList(L);
cout< DestroyList(L);
}
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 17

  • 18

  • 19

  • 20

  • 21

  • 22

  • 23

  • 24

  • 25

  • 26

  • 27

  • 28

  • 29

  • 30

  • 31

  • 32

  • 33

  • 34

  • 35

  • 36

  • 37

  • 38

  • 39

  • 40

  • 41

  • 42

  • 43

  • 44

  • 45

  • 46

  • 47

  • 48

  • 49

  • 50

  • 51

  • 52

  • 53

  • 54

  • 55

  • 56

  • 57

  • 58

  • 59

  • 60

  • 61

  • 62

  • 63

  • 64

  • 65

  • 66

  • 67

  • 68

  • 69

  • 70

  • 71

  • 72

  • 73

  • 74

  • 75

  • 76

  • 77

  • 78

  • 79

  • 80

  • 81

  • 82

  • 83

  • 84

  • 85

  • 86

  • 87

  • 88

  • 89

  • 90

  • 91

  • 92

  • 93

  • 94

  • 95

  • 96

  • 97

  • 98

  • 99

  • 100

  • 101

  • 102

  • 103

  • 104

  • 105

  • 106

  • 107

  • 108

  • 109

  • 110

2、linklist.cpp

#include 
#include
#include
using namespace std;
typedef char ElemType;
//#define Maxsize 50
typedef struct LNode //定义单链表结点类型
{
ElemType data;
struct LNode *next;
}LinkList;
void InitList(LinkList *&L) //初始化单链表
{
L=(LinkList *)malloc(sizeof(LinkList)); //创建头结点
L->next=NULL;
}
void DestroyList(LinkList *L) //销毁单链表
{
LinkList *p=L,*q=L->next;
while(q!=NULL)
{
free(p);
p=q;
q=p->next;
}
free(p);
}
bool ListEmpty(LinkList *L) //判断单链表是否为空
{
return (L->next==NULL);
}
int ListLength(LinkList *L) //求单链表的长度
{
LinkList *p=L;
int i=0;
while(p->next!=NULL)
{
i++;
p=p->next;
}
return (i);
}
void DispList(LinkList *L) //输出单链表
{
LinkList *p=L->next;
// int i=0;
while(p->next!=NULL)
{
printf("%c ",p->data);
p=p->next;
}
printf("%c ",p->data);
printf("\n");
}
bool GetElem(LinkList *L,int i,ElemType &e) //求单链表中某个元数的值
{
LinkList *p=L;
int j=0;
while(p!=NULL&&j {
j++;
p=p->next;
}
if(p==NULL)
return false;
else
{
e=p->data;
return true;
}
}
int LocateElem (LinkList *L,ElemType e) //按元素值查找
{
LinkList *p=L;
int j=0;
while(p!=NULL&&p->data==e)
{
j++;
p=p->next;
}
if(p==NULL)
return 0;
else
{
return (j+1);
}
}
bool ListInsert(LinkList *L,int i,ElemType e) //插入数据元素
{
LinkList *p=L,*s;
int j=0;
while(p!=NULL&&j {
j++;
p=p->next;
}
if(p==NULL)
return false;
else
{
s=(LinkList *)malloc(sizeof(LinkList));
s->data=e;
s->next=p->next;
p->next=s;
return true;
}
}
bool ListDelete(LinkList *L,int i,ElemType &e)
{
LinkList *p=L,*s;
int j=0;
while(p!=NULL&&j {
j++;
p=p->next;
}
if(p==NULL)
return false;
else
{
s=p->next;
if(s==NULL)
return false;
e=s->data;
p->next=s->next;
free(s);
return true;
}
}
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 17

  • 18

  • 19

  • 20

  • 21

  • 22

  • 23

  • 24

  • 25

  • 26

  • 27

  • 28

  • 29

  • 30

  • 31

  • 32

  • 33

  • 34

  • 35

  • 36

  • 37

  • 38

  • 39

  • 40

  • 41

  • 42

  • 43

  • 44

  • 45

  • 46

  • 47

  • 48

  • 49

  • 50

  • 51

  • 52

  • 53

  • 54

  • 55

  • 56

  • 57

  • 58

  • 59

  • 60

  • 61

  • 62

  • 63

  • 64

  • 65

  • 66

  • 67

  • 68

  • 69

  • 70

  • 71

  • 72

  • 73

  • 74

  • 75

  • 76

  • 77

  • 78

  • 79

  • 80

  • 81

  • 82

  • 83

  • 84

  • 85

  • 86

  • 87

  • 88

  • 89

  • 90

  • 91

  • 92

  • 93

  • 94

  • 95

  • 96

  • 97

  • 98

  • 99

  • 100

  • 101

  • 102

  • 103

  • 104

  • 105

  • 106

  • 107

  • 108

  • 109

  • 110

  • 111

  • 112

  • 113

  • 114

  • 115

  • 116

  • 117

  • 118

  • 119

  • 120

  • 121

  • 122

  • 123

  • 124

  • 125

  • 126

  • 127

  • 128

  • 129

exp2-2.cpp

#include 
#include
#include
using namespace std;
typedef char ElemType;
//#define Maxsize 50
typedef struct LNode //定义单链表结点类型
{
ElemType data;
struct LNode *next;
}LinkList;
void InitList(LinkList *&L) //初始化单链表
{
L=(LinkList *)malloc(sizeof(LinkList)); //创建头结点
L->next=NULL;
}
void DestroyList(LinkList *L) //销毁单链表
{
LinkList *p=L,*q=L->next;
while(q!=NULL)
{
free(p);
p=q;
q=p->next;
}
free(p);
}
bool ListEmpty(LinkList *L) //判断单链表是否为空
{
return (L->next==NULL);
}
int ListLength(LinkList *L) //求单链表的长度
{
LinkList *p=L;
int i=0;
while(p->next!=NULL)
{
i++;
p=p->next;
}
return (i);
}
void DispList(LinkList *L) //输出单链表
{
LinkList *p=L->next;
// int i=0;
while(p->next!=NULL)
{
printf("%c ",p->data);
p=p->next;
}
printf("%c ",p->data);
printf("\n");
}
bool GetElem(LinkList *L,int i,ElemType &e) //求单链表中某个元数的值
{
LinkList *p=L;
int j=0;
while(p!=NULL&&j {
j++;
p=p->next;
}
if(p==NULL)
return false;
else
{
e=p->data;
return true;
}
}
int LocateElem (LinkList *L,ElemType e) //按元素值查找
{
LinkList *p=L;
int j=0;
while(p!=NULL&&p->data==e)
{
j++;
p=p->next;
}
if(p==NULL)
return 0;
else
{
return (j+1);
}
}
bool ListInsert(LinkList *L,int i,ElemType e) //插入数据元素
{
LinkList *p=L,*s;
int j=0;
while(p!=NULL&&j {
j++;
p=p->next;
}
if(p==NULL)
return false;
else
{
s=(LinkList *)malloc(sizeof(LinkList));
s->data=e;
s->next=p->next;
p->next=s;
return true;
}
}
bool ListDelete(LinkList *L,int i,ElemType &e)
{
LinkList *p=L,*s;
int j=0;
while(p!=NULL&&j {
j++;
p=p->next;
}
if(p==NULL)
return false;
else
{
s=p->next;
if(s==NULL)
return false;
e=s->data;
p->next=s->next;
free(s);
return true;
}
}
int main()
{
LinkList *h;
ElemType e;
cout< cout< InitList(h);
cout< ListInsert(h,1,'a');
ListInsert(h,2,'b');
ListInsert(h,3,'c');
ListInsert(h,4,'d');
ListInsert(h,5,'e');
cout< DispList(h);
cout< printf("(5)单链表h为%s\n",(ListEmpty(h)?"空":"非空"));
GetElem(h,3,e);
cout< cout< cout< ListInsert(h,4,'f');
cout< DispList(h);
cout< ListDelete(h,3,e);
cout< DispList(h);
cout< DestroyList(h);
}
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 17

  • 18

  • 19

  • 20

  • 21

  • 22

  • 23

  • 24

  • 25

  • 26

  • 27

  • 28

  • 29

  • 30

  • 31

  • 32

  • 33

  • 34

  • 35

  • 36

  • 37

  • 38

  • 39

  • 40

  • 41

  • 42

  • 43

  • 44

  • 45

  • 46

  • 47

  • 48

  • 49

  • 50

  • 51

  • 52

  • 53

  • 54

  • 55

  • 56

  • 57

  • 58

  • 59

  • 60

  • 61

  • 62

  • 63

  • 64

  • 65

  • 66

  • 67

  • 68

  • 69

  • 70

  • 71

  • 72

  • 73

  • 74

  • 75

  • 76

  • 77

  • 78

  • 79

  • 80

  • 81

  • 82

  • 83

  • 84

  • 85

  • 86

  • 87

  • 88

  • 89

  • 90

  • 91

  • 92

  • 93

  • 94

  • 95

  • 96

  • 97

  • 98

  • 99

  • 100

  • 101

  • 102

  • 103

  • 104

  • 105

  • 106

  • 107

  • 108

  • 109

  • 110

  • 111

  • 112

  • 113

  • 114

  • 115

  • 116

  • 117

  • 118

  • 119

  • 120

  • 121

  • 122

  • 123

  • 124

  • 125

  • 126

  • 127

  • 128

  • 129

  • 130

  • 131

  • 132

  • 133

  • 134

  • 135

  • 136

  • 137

  • 138

  • 139

  • 140

  • 141

  • 142

  • 143

  • 144

  • 145

  • 146

  • 147

  • 148

  • 149

  • 150

  • 151

  • 152

  • 153

  • 154

  • 155

  • 156

  • 157

  • 158

  • 159

  • 160

结果截图

1、6dfe67a398a59dbc316380829b2d7fc1.png
2.d2baafdba5f9ff0ecd1c6a8c86cb5c52.png

原文链接:

https://blog.csdn.net/weixin_41032720/article/details/94835389

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值