实验一 线性表的基本操作

举报
谙忆 发表于 2021/05/26 17:45:13 2021/05/26
【摘要】 一、线性结构的顺序表基本操作 实验目的 1.学会定义单链表的结点类型、线性表的顺序存储类型,实现C程序的基本结构,对线性表的一些基本操作和具体的函数定义。 2.掌握顺序表的基本操作,实现顺序表的插入、删除、查找以及求并集等运算。 3.掌握对多函数程序的输入、编辑、调试和运行过程。 实验要求 1.预习C语言中结构体的定义与基本操作方法。 2.对顺序表的每个基...

一、线性结构的顺序表基本操作
实验目的
1.学会定义单链表的结点类型、线性表的顺序存储类型,实现C程序的基本结构,对线性表的一些基本操作和具体的函数定义。
2.掌握顺序表的基本操作,实现顺序表的插入、删除、查找以及求并集等运算。
3.掌握对多函数程序的输入、编辑、调试和运行过程。
实验要求
1.预习C语言中结构体的定义与基本操作方法。
2.对顺序表的每个基本操作用单独的函数实现。
3.编写完整程序完成下面的实验内容并上机运行。
实验内容
1.编写程序实现顺序表的下列基本操作:
(1)初始化顺序表La。
(2)将La置为空表。
(3)销毁La。
(4)在La中插入一个新的元素。
(5)删除La中的某一元素。
(6)在La中查找某元素,若找到,则返回它在La中第一次出现的位置,否则返回0。
(7)打印输出La中的元素值。
2.(选做)编写程序完成下面的操作:
(1)构造两个顺序线性表La和Lb,其元素都按值非递减顺序排列。
(2)实现归并La和Lb得到新的顺序表Lc,Lc的元素也按值非递减顺序排列。
(3)假设两个顺序线性表La和Lb分别表示两个集合A和B,利用union_Sq操作实现A=A∪B。
二、单链表基本操作(选做)
实验目的
1. 学会定义单链表的结点类型、线性表的链式存储类型,实现对单链表的一些基本操作和具体的函数定义,了解并掌握单链表的类定义以及成员函数的定义与调用。
2. 掌握单链表基本操作及两个有序表归并、单链表逆置等操作的实现。
实验要求
1.预习C语言中结构体的定义与基本操作方法。
2.对单链表的每个基本操作用单独的函数实现。
3.编写完整程序完成下面的实验内容并上机运行。
实验内容
1.编写程序完成单链表的下列基本操作:
(1)初始化单链表La。
(2)在La中插入一个新结点。
(3)删除La中的某一个结点。
(4)在La中查找某结点并返回其位置。
(5)打印输出La中的结点元素值。
2.构造一个单链表L,其头结点指针为head,编写程序实现将L逆置。(即最后一个结点变成第一个结点,原来倒数第二个结点变成第二个结点,如此等等。)


附:代码
c++下运行:

#include<stdio.h>
#include<stdlib.h>

//顺序表的定义:
#define ListSize 100//表空间大小可根据实际需要而定,这里假设为100
typedef int DataType;//DataType可以是任何相应的数据类型如int ,float,char.
typedef struct SeqList
{ DataType data[ListSize];  //向量data 用于存放表节点 int length; // 当前的表达长度
}SeqList;

int main()
{ struct SeqList L; int i,k,x,n;
//函数声明 struct SeqList DeleteList(SeqList L,int i); struct SeqList InitList(struct SeqList L); struct SeqList CreateList(struct SeqList L,int n); struct SeqList InsertList(SeqList L,DataType x,int k); void PrintList(SeqList L); int LocateList(SeqList L,DataType x); //初始化表 L=InitList(L);
//建立顺序表 printf("输入表中元素数量n\n"); scanf("%d",&n); L=CreateList(L,n); printf("输入的元素为:\n"); PrintList(L);
//查找数据 printf("输入需要查找的数据:\n"); scanf("%d",&x); if(LocateList(L,x)==0) printf("该元素不存在。。。\n"); else{ printf("该元素的位置为:\n"); printf("%d",LocateList(L,x)); } printf("\n"); //插入数据 printf("输入插入的数据 x="); scanf("%d",&x); printf("输入插入的位置 k="); scanf("%d",&k); printf("\n插入 数据前的表:\n");//表插入前后对比性输出 PrintList(L); L=InsertList(L,x,k); printf("\n插入 数据后的表:\n");//表插入前后对比性输出 PrintList(L); //删除数据 printf("输入删除的位置 k="); scanf("%d",&k); printf("\n删除 数据前的表:\n");//表删除前后对比性输出 PrintList(L); L=DeleteList(L,k); printf("\n删除 数据后的表:\n");//表删除前后对比性输出 PrintList(L); return 0;

}
//初始化顺序表
struct SeqList InitList(struct SeqList L)
{ L.length=0; return L;
}
//顺序表的建立
struct SeqList CreateList(struct SeqList L,int n)
{ int i; printf("请输入%d个元素:\n",n); for(i=0;i<n;i++) { scanf("%d",&L.data[i]); L.length++; } return L;
}

void PrintList(SeqList L)
{ int i; if(L.length==0) { printf("此表为空...\n"); return ; } for(i=0;i<L.length-1;i++) { printf("%d ",L.data[i]); } printf("%d\n",L.data[i]);
}

int LocateList(SeqList L,DataType x)
{ int i; if(L.length==0) printf("该顺序表为空。。。\n"); for(i=0;i<L.length;i++) {   if(x==L.data[i]) return i+1; //printf("**\n"); } return 0;
}
struct SeqList InsertList(SeqList L,DataType x,int k)
{ int i; if(k<0||k>L.length) { printf("输入位置非法。。"); return L; } if(L.length==ListSize) { printf("表上溢,不能插入\n"); return L; } for(i=L.length;i>=k;i--) L.data[i]=L.data[i-1]; L.data[k-1]=x; L.length++; return L;
}

struct SeqList DeleteList(SeqList L,int i)
{ int j; for(j=i-1;j<L.length;j++) L.data[j]=L.data[j+1]; L.length--; return 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
  • 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

文章来源: chenhx.blog.csdn.net,作者:谙忆,版权归原作者所有,如需转载,请联系作者。

原文链接:chenhx.blog.csdn.net/article/details/49592343

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。