数据结构顺序表的基本操作
#include
#include
#include
#include
#include
#include
#include
#include
#include
const max=10000;
struct SqList
{
int elem[max]; //存放元素的数组
int length; //当前长度
};
void slow()
{
cout << "\n\n请按任意键继续" << flush;
getch();
}
void init(SqList &list);
void display(SqList &list);
void insert(SqList &list);
void search(SqList &list);
void del(SqList &list);
void simpleSort(SqList &list);
void quickSort(SqList &list);
void quicksort_cnt(void);
void binarySearch(SqList &list);
void nzlist(SqList &list);
SqList list;
int Partion(SqList &list,int ,int );
void main()
{
char choice;
while (1)
{
system("cls");
cout << "\n\n\n\n";
cout << "\t\t 顺序表操作\n";
cout << "\t\t======================================"; cout << "\n\n";
cout << "\t\t 1:初始化\n";
cout << "\t\t 2:显示\n";
cout << "\t\t 3:单个插入\n";
cout << "\t\t 4:查找\n";
cout << "\t\t 5:删除\n";
cout << "\t\t 6:简单选择排序\n";
cout << "\t\t 7:快速排序\n";
cout << "\t\t 8:折半查找\n";
cout << "\t\t 9:逆置线性表\n";
cout << "\n";
cout << "\t\t 0:退出\n";
cout << "\n";
cout << "\t\t请选择:" << flush;
choice = getch();
system("cls");
switch(choice)
{
case '1':
init(list);
break;
case '2':
display(list);
break;
case '3':
insert(list);
break;
case '4':
search(list);
break;
case '5':
del(list);
break;
case '6':
simpleSort(list);
break;
case '7':
quickSort(list);
break;
case '8':
binarySearch(list);
break;
case '9':
nzlist(list);
break;
case '0':
exit(0);
}
}
}
//屏幕提示后,从键盘输入线性表长度和随机数种子,生成指定长度的线性表list void init(SqList &list)
{
int i;
while (1)
{
cout << "输入元素个数(0-"<< max << "):"<< flush;
cin >> list.length;
if (list.length >= 0 && list.length <= max)
break;
cout << endl;
}
while (1)
{
cout << "输入随机数种子(0-32767):" << flush;
cin >> i;
if (i >= 0 && i <= 32767)
break;
cout << endl;
}
srand(i); //指定随机数种子,相同的种子将产生相同的数据序列
rand();
for (i = 0; i < list.length; i++)
{
list.elem[i] = rand() % 10000;
}
for (i = list.length; i < max; i++)
list.elem[i] = 0;
}
//在屏幕上依次显示线性表list中的元素个数和全部元素
//格式应便于观察
//如果需要制定输出的宽度,可以使用cout << setw(W) << X 其中X是输出的数值,W是占据的列数
void display(SqList &list)
{
cout<<"共有"< for(int i=0;i cout< } //屏幕提示后,从键盘输入一个元素值和一个插入位置值,然后把这个新元素插到线性表list 的指定位置处 //应有溢出判断和报告 void insert(SqList &list) { cout<<"请输入要插入的值:"< cout<<"请输入要插入的位置"< int x; int n; int i; cin>>x; cin>>n; if (list.length>=0 && list.length<=max) {for (i=list.length-1;i>n;i--) { list.elem[i+1]=list.elem[i]; } list.elem[n]=x; list.length++;} else { cout<<"插入失败"< } } //屏幕提示后,从键盘输入一个元素值,在线性表list中搜索这个元素 //屏幕显示搜索结果和搜索过程的比较次数 void search(SqList &list) { int i=0,j;cout<<"请输入要搜索的数据:"; cin>>j; while(i if(list.elem[i]==j) cout<<"已找到,该元素位于第"< else cout<<"sorry, "; cout<<"共比较了"< cout< slow(); } //屏幕提示后,从键盘输入一个元素值,在线性表list中删除这个元素//屏幕显示成功与否的信息,并显示比较次数和移动次数 void del(SqList &list) { int i=0,j; cout<<"请输入要删除的值:"; cin>>j; while(i if(list.elem[i]==j) {for(int m=i;m list.elem[m]=list.elem[m+1];list.length--;cout<<"completed"< cout<<"比较次数:"< slow(); } //对线性表list进行简单排序选择 //屏幕显示比较次数和移动次数 void simpleSort(SqList &list) { int i,j,k,c=0,d=0; for(i=0;i for(j=i;j { d++; if(list.elem[j] {c++;k=list.elem[j];list.elem[j]=list.elem[i];list.elem[i]=k;}} cout<<"比较次数:"< slow(); } //对线性表list进行快速排序 //屏幕显示比较次数和移动次数 void QSort (SqList &list,int low,int high); void quickSort(SqList &list) { int CPnum=0, QSnum=0; QSort(list,0,list.length-1); cout<<"比较次数:"< cout<<"移动次数:"< slow(); } int Partition(SqList &list,int low,int high) {int CPnum=0, QSnum=0; int pivotkey=list.elem[low]; while(low { while(low list.elem[low]=list.elem[high]; ++QSnum; while(low list.elem[high]=list.elem[low]; ++QSnum; } list.elem[low]=pivotkey; return low; } void QSort (SqList &list,int low,int high) { int pivotloc=0; if(low { pivotloc=Partition(list,low,high); QSort(list,low,pivotloc-1); QSort(list,pivotloc+1,high); } } //屏幕提示后,从键盘输入一个元素值,对经过排序的线性表list进行折半查找//屏幕显示查找结果,并显示比较次数 void binarySearch(SqList &list) { int i,low,high,mid,m=0,n=0;cout<<"请输入要查找的值:";cin>>i; low=0,high=list.length-1; while(low<=high){ mid=(low+high)/2; if(i==list.elem[mid])break; else if(i>list.elem[mid]){low=mid+1;m++;} else {high=mid-1;n++;} } if(i!=list.elem[mid])cout<<"查找失败"< else cout<<"位于第"< //编程实现一个顺序表的就地逆置,即利用原表的储存空间将顺序表逆置void nzlist(SqList &list) { int t,n=list.length; for(int i=0;i t=list.elem[n-1-i]; list.elem[n-1-i]=list.elem[i]; list.elem[i]=t; } 第二章复习题 本章重点掌握:线性结构特点,顺序存储结构和链式存储结构特点。 1.在顺序表中插入或删除一个元素,需要平均移动( 一半 )元素,具体移动的元素个数与( 插入或删除的位置 )有关。插入时平均 次数(n/2 ),删除时平均次数((n-1)/2 )。 2.有一个含头结点的循环链表,头指针为 head, 则其为空的条件是:( C ) A)head==NULL B)head->next==NULL C)head->next==head 3.在长度为 n 的顺序表的第 i 个位置上插入一个元素(1≤i≤n+1),元素的移动次数为:( A ) A) n – i + 1 B) n – i C) i D) i – 1 4.对于只在表的首、尾两端进行插入操作的线性表,宜采用的存储结构为( C ) A)顺序表B) 用头指针表示的循环单链表 C) 用尾指针表示的循环单链表D) 单链表 5.设单链表中结点的结构为(data, link)。已知指针 q 所指结点是指针 p 所指结点的直接前驱,若在*q 与*p 之间插入结点*s,则应执行下列哪一个操作?( B ) A)s->link = p->link;p->link = s;(B) q->link = s;s->link = p; (C) p->link = s->link;s->link = p;(D) p->link = s;s->link = q; 6.设单链表中结点的结构为(data, link)。已知指针 p 所指结点不是尾结点,若在*p 之后插入结点*s,则应执行下列哪一个操作?(B) A)s->link = p;p->link = s;(B) s->link = p->link;p->link = s; (C) s->link = p->link;p = s;(D) p->link = s;s->link = p; 7.设单链表中结点的结构为(data, link)。若想摘除结点*p 的直接后继,则应执行下列哪一个操作?(A) (A) p->link = p->link->link; (B) p = p->link;p->link = p->link->link; (C) p->link = p->link;(D) p = p->link->link; 8.设单循环链表中结点的结构为(data, link),且 rear 是指向非空的 带表头结点的单循环链表的尾结点的指针。若想删除链表第一个结点,则应执行下列哪一个操作?(D) (A)s = rear;rear = rear->link;delete s; (B)rear = rear->link;delete rear; (C)rear = rear->link->link;delete rear; (D)s = rear->link->link;rear->link->link = s->link; delete s; (rear 指向尾结点,rear->link->link 指向第一个结点,第一个结点变为原来的第二个结点) 9.设双向循环链表中结点的结构为(data, lLink, rLink),且不带表头 结点。若想在指针 p 所指结点之后插入指针 s 所指结点,则应执 行下列哪一个操作?( D ) 课程名称:数据结构任课教师: 实验题目:线性表的基本操作 实验环境: Visual C++ 6.0 实验目的: 1、掌握线性表的定义; 2、掌握线性表的基本操作,如建立、查找、插入和删除等。 实验内容: 定义一个包含学生信息(学号,姓名,成绩)的的顺表序和链表,使其具有如下功能: (1)根据指定学生个数,逐个输入学生信息; (2)逐个显示学生表中所有学生的相关信息; (3)根据姓名进行查找,返回此学生的学号和成绩; (4)根据指定的位置可返回相应的学生信息(学号,姓名,成绩); (5)给定一个学生信息,插入到表中指定的位置; int createStLink(struct Node *head,struct Node *stu) { struct Node *p6,*p7,*p8; p7=head; p6=stu; if(head==NULL) { head=p6;p6->next=NULL; } else { //如果链表为空则在头结点创建信息while(p6->num > p7->num && p7->next!=NULL) { p8=p7; p7=p7->next; } if(p6->num<=p7->num) { if(head==p7) head=p6; else p8->next=p6; p6->next=p7; } else { p7->next=p6;p6->next=NULL; } } N++; return 1; } int main() { struct Node *H,*stud; char M; int num1; H=initlist(); (6)删除指定位置的学生记录; 顺序表的基本操作的实现 一、实验目的 1、掌握使用VC++上机调试顺序表的基本方法; 2、掌握顺序表的基本操作:建立、插入、删除等运算。 二、实验仪器 安装VC++软件的计算机。 三、实验原理 利用线性表的特性以及顺序存储结构特点对线性表进行相关的基本操作四、实验内容 程序中演示了顺序表的创建、插入和删除。 程序如下: #include i nt i,x; i nt n=10; L.length=0; c lrscr(); C reateList(&L,n); /*建立顺序表*/ P rintList(&L,n); /*打印建立后的顺序表*/ p rintf("INPUT THE RESEARCH ELEMENT"); s canf("%d",&x); i=LocateList(&L,x); p rintf("the research position is %d\n",i); /*顺序表查找*/ p rintf("input the position of insert:\n"); s canf("%d",&i); p rintf("input the value of insert\n"); s canf("%d",&x); I nsertList(&L,x,i); /*顺序表插入*/ P rintList(&L,n); /*打印插入后的顺序表*/ p rintf("input the position of delete\n"); s canf("%d",&i); D eleteList(&L,i); /*顺序表删除*/ P rintList(&L,n); /*打印删除后的顺序表*/ g etchar(); } /*顺序表的建立:*/ void CreateList(SeqList *L,int n) {int i; printf("please input n numbers\n"); for(i=1;i<=n;i++) scanf("%d",&L->data[i]); L->length=n; 实现顺序表的各种基本运算 一、实验目的 了解顺序表的结构特点及有关概念,掌握顺序表的各种基本操作算法思想及其实现。 二、实验内容 编写一个程序,实现顺序表的各种基本运算: 1、初始化顺序表; 2 、顺序表的插入; 3、顺序表的输出; 4 、求顺序表的长度 5 、判断顺序表是否为空; 6 、输出顺序表的第i位置的个元素; 7 、在顺序表中查找一个给定元素在表中的位置; 8、顺序表的删除; 9 、释放顺序表 三、算法思想与算法描述简图 主函数main 四、实验步骤与算法实现 #in clude 实验3 顺序表 一、实验目的 1. 熟练掌握顺序表的类型定义和基本操作算法(以建立、插入、删除、遍历、排序和归并等操作为重点)的实现。 2. 通过实验加深对C语言的使用(特别是函数、数组、结构体和指针)。 3. 掌握模块化程序设计方法。 二、预备知识 1. 顺序表的类型定义 //线性表存储空间的初始分配量 #define LIST_Init_Size 100 //线性表存储空间的分配增量 #define LISTINCREMENT 10 typedef struct{ ElemType *elem; //存储区域基地址 int length; //当前有效长度 int listsize;//当前分配的存储容量 } SqList, *PSqList; 2. 顺序表的基本操作 1)初始化线性表InitList(&L) 该运算的结果是构造一个空的线性表L,为线性表分配存储空间用于存放数据元素。 2)销毁线性表DestroyList(&L ) 该运算的结果是释放线性表L占用的内存空间。 3)判定是否为空表ListEmpty(L) 该运算返回一个值表示L是否为空表。若L为空表,则返回1,否则返回0。4)求线性表的长度ListLength(L) 该运算返回顺序表L的长度。实际上只需返回length成员的值即可。 5)PriorElem( L, cur_e, &pre_e ) 该运算返回给定数据元素的前驱数据元素的值 6)NextElem( L, cur_e, &next_e ) 该运算返回给定数据元素的后继数据元素的值 7)输出线性表DispList(L) 该运算当线性表L不为空时,顺序输出L中各数据元素的值。 8)求某个数据元素值GetElem(L,i,&e) 该运算返回L中第i(1≤i≤ListLength(L))个元素的值,存放在e中。 8)按元素值查找LocateElem(L,e) 该运算顺序查找第1个值域与e相等的数据元素的序号。若这样的元素不存在,则返回值为0。 9)插入数据元素ListInsert(&L,i,e) 该运算在顺序表L的第i个位置(1≤i≤ListLength(L)+1)上插入新的元素e。10)删除数据元素ListDelete(&L,i,&e) 该运算删除顺序表L的第i(1≤i≤ListLength(L))个元素。 11)清空线性表ClearList( &L ) 删除线性表L中的所有数据元素,但不释放已分配给线性表的存储空间。2. 两个有序表的归并算法 void MergeList(SqList La, SqList Lb, PSqList PLc) { InitList(PLc); // 构造空的线性表Lc i = j = 1; k = 1; La_len = ListLength(La); Lb_len = ListLength(Lb); 附页(实验2-1代码): 头文件“DEFINE2-1.h”: #define MaxSize 10 typedef struct { char data[MaxSize]; int length; }SqList; #include 实验一顺序表的操作 1. 实验题目:顺序表的操作 2.实验目的和要求: 1)了解顺 序表的基本概念、顺序表结构的定义及在顺序表上的基本操作(插入、 删除、查找以及线性表合并 )。 2)通过在 Turbo C ( WinTc ,或 visual stdio6 )实现以上操作的 C 语言 代码。 3)提前了解实验相关的知识(尤其是 C 语 言)。 3.实验内容:(二选一) 1) 顺序表的插入算法, 删除算法, 顺序表的合并算法 2) 与线性表应用相关的实例( 自己选择具体实例) 4.部分参考实验代码: ⑴ 顺序表结构的定义: #include . for(j=la-> length;j>=i;j--) la->list[j+1]=la->list[j]; la->list[i]=x; la-> length ++; return 1; } ⑶ 顺序表删除 int ListDelete(sqList *la,int i) { if(i<0||i>la-> length ) { printf( “ return 0; n”); } for(i;i #include 顺序表的应用数据结构实验报告记录 ————————————————————————————————作者:————————————————————————————————日期: 大学数据结构实验报告 课程名称数据结构实验第(三)次实验实验名称顺序表的应用 学生姓名于歌专业班级学号 实验成绩指导老师(签名)日期2018年9月30日一、实验目的 1.学会定义线性表的顺序存储类型,实现C程序的基本结构,对线性表的一些基本操作和具体的函数定义。 2.掌握顺序表的基本操作,实现顺序表的插入、删除、查找以及求并集等运算。 3.掌握对多函数程序的输入、编辑、调试和运行过程。 二、实验要求 1.预习C语言中结构体的定义与基本操作方法。 2.对顺序表的每个基本操作用单独的函数实现。 3.编写完整程序完成下面的实验内容并上机运行。 4.整理并上交实验报告。 三、实验内容: 1.定义一个包含学生信息(学号,姓名,成绩)的顺序表,使其具有如下功能: (1)根据指定学生个数,逐个输入学生信息 (2)逐个显示学生表中所有学生的相关信息 (3)根据姓名进行查找,返回此学生的学号和成绩 (4)根据指定的位置可返回相应的学生信息(学号,姓名,成绩) (5)给定一个学生信息,插入到表中指定的位置 (6)删除指定位置的学生记录 (7)统计表中学生个数 四、实验设计 1.定义一个包含学生信息(学号,姓名,成绩)的顺序表,使其具有如下功能: (1)根据指定学生个数,逐个输入学生信息 for(count=0; count 数据结构实验报告-顺序表的创建、遍历及有序合并操作二、实验内容与步骤 实现顺序表的创建、遍历及有序合并操作,基本数据结构定义如下: typedef int ElemType; #define MAXSIZE 100 #define FALSE 0 #define TRUE 1 typedef struct {ElemType data[MAXSIZE]; int length; }seqlist; 创建顺序表,遍历顺序表 #include #define TRUE 1 typedef int ElemType; //用户自定义数据元素类型 // 顺序表结构体的定义 typedef struct { ElemType *elem; //顺序表的基地址 int length; //顺序表的当前长度 int listsize; //预设空间容量 }SqList; //线性表的顺序存储结构 SqList* InitList() //创建空的顺序表 { SqList* L = (SqList*)malloc(sizeof(SqList));//定义顺序表L if(!L) { printf("空间划分失败,程序退出\n"); return NULL; } L->elem=(ElemType *)malloc(MAXSIZE*sizeof(ElemType)); if(!L->elem) { printf("空间划分失败,程序退出\n"); 数据结构实验一顺序表的实现 班级学号分数 一、实验目的: 1.熟悉线性表的基本运算在两种存储结构(顺序结构和链式结构)上的实现; 2.以线性表的各种操作的实现为重点; 3.通过本次学习帮助学生加深C语言的使用,掌握算法分析方法并对已经设计 出的算法进行分析,给出相应的结果。 二、实验要求: 编写实验程序,上机运行本程序,保存程序的运行结果,结合程序进行分析并写出实验报告。 三、实验容及分析: 1.顺序表的建立 建立一个含n个数据元素的顺序表并输出该表中各元素的值及顺序表的长度。 程序如下: 头文件SqList.h的容如下: #include if(!L->elem) return(OVERFLOW); L->length=0; L->listsize=LIST_INIT_SIZE; return OK; } Status CreatList_Sq(SqList *L,int n) { int i; printf("输入%d个整数:\n",n); for(i=0;i 实验一顺序表的基本操作 一、实验目的 掌握线性表的顺序表基本操作:建立、插入、删除、查找、合并、打印等运算。 二、实验要求包含有头文件和main函数; 1.格式正确,语句采用缩进格式; 2.设计子函数实现题目要求的功能; 3.编译、连接通过,熟练使用命令键; 4.运行结果正确,输入输出有提示,格式美观。 三、实验设备、材料和工具 1.奔腾2计算机或以上机型 2.turboc2,win-tc 四、实验内容和步骤 1. 建立一个含n个数据元素的顺序表并输出该表中各元素的值及顺序表的长度。 2. 往该顺序表中第i位置插入一个值为x的数据元素。 3. 从该顺序表中第j位置删除一个数据元素,由y返回。 4. 从该顺序表中查找一个值为e的数据元素,若找到则返回该数据元素的位置,否则返回“没有找到”。 五、程序 #include typedef struct { int *elem; int length,listsize; }sqlist; //类型定义 void initlist_sq(sqlist &L) //初始化顺序表 { } void output(sqlist L) //输出顺序表 { } void insertlist(sqlist &L,int i, int x) //顺序表中插入x { } void deletelist(sqlist &L,int j, int y) //顺序表中删除y { } int locateelem(sqlist &L,int e) //顺序表中查找e { } void main() { } 【运行结果】 void initlist_sq(sqlist &L) //初始化顺序表 { L.elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int)); if(!L.elem) exit (OVERFLOW); 实验报告 课程:数据结构与算法实验日期: 实验名称:实现顺序表的基本操作 一、实验目的 实现顺序表的熟练操作 二、实验内容 (1)先给出顺序表的类型定义 (2)给出顺序表的如下基本操作的算法函数定义 a) 构造一个空的线性表:InitList_Sq(SqList &L) b) 在顺序表L的第i个位置之前插入新的元素e:ListInsert_Sq(SqList &L, int i, ElemType e) c) 在顺序表L中删除第i个元素,并用e返回其值:ListDelete_Sq(SqList &L, int i, ElemType &e) (3)实现如下新操作的函数定义: a) 借助ListInsert_Sq操作创建一个顺序表:ListCreate_Sq(???) b) 计算线性表的长度:ListLength_Sq(???) c) 打印顺序表中的所有元素值:ListPrint_Sq(???) 其中???请自行考虑 (4)在主函数中分别调用ListCreate_Sq、ListPrint_Sq 、ListLength_Sq、ListInsert_Sq、ListDelete_Sq等函数,查看这些函数是否正常工作 三、实验步骤 (1)先给出顺序表的类型定义 (2)给出顺序表的如下基本操作的算法函数定义 a) 构造一个空的线性表:InitList_Sq(SqList &L) b) 在顺序表L的第i个位置之前插入新的元素e:ListInsert_Sq(SqList &L, int i, ElemType e) c) 在顺序表L中删除第i个元素,并用e返回其值:ListDelete_Sq(SqList &L, int i, ElemType &e) ******************************* 实验题目:顺序表的基本操作 实验者信息:班级13007102,姓名庞文正,学号1300710226实验完成的时间3:00 ****************************** 一、实验目的 实验内容阿尔 (1)掌握顺序表的基本运算,熟悉对顺序表的一些基本操作和具体函数的定义。 (2)掌握顺序存储的概念,学会定义线性表的顺序存储类型。 (3)熟悉c语言程序的基本结构,掌握程序中的用户头文件、实现文件和主文件之间的相互关系及各自的作用。(4)熟悉c语言环境的使用及程序的输入、编辑、调试和运行的全过程。 加深对顺序存储结构的理解,逐步培养解决实际问题的编程能力。 二、实验内容 实现顺序表上的插入、删除等操作。调试程序并对相应的输出作出分析;修改输入数据,预期输出并验证输出的结果。加深对有关算法的理解。 三、算法设计与编码 1.本实验用到的理论知识 本次实验用到结构体的定义,函数定义, 具体函数的定义有: 1)insert(L,i,x)在顺序表的第i个元素之前插入一个新元素x. 2)delete (L,i) 删除顺序表的第i个元素。 3)listprint(L) 输出顺序表。 2.算法概要设计 给出实验的数据结构描述,程序模块、功能及调用关系 第一步:定义顺序表的存储结构。 第二步:编写顺序表操作的具体函数定义。 第三步:使用定义的顺序表并调用顺序表的一些操作,实现具体运算。 四、运行与测试 (1)运行成功的代码: #include"stdio.h" //包含输出输入文件 #define MAXSIZE 100 //宏定义 #define OK 1 #define OVERFLOW -2 typedef int elemtype; typedef struct //定义顺序表的结构 { 算法分析实验一顺序表的实现 班级学号姓名分数 一、实验目的: 1.掌握线性表的顺序存储结构 2.能熟练地利用顺序存储结构实现线性表的基本操作 3.能熟练地掌握顺序存储结构中算法的实现 二、实验要求 熟悉线形表的基本操作,对线形表能够进行插入、删除、修改、查找等操作。 三、实验内容及分析: 建立含有若干个元素的顺序表,并将结果在屏幕上输出。对刚建立的顺序表实现插入、删除、修改、查找,并将结果在屏幕上输出。 内容分析:先建立一个顺序表,定义表的最大长度为100,程序可以实现输出、查找、插入、删除操作。先定义一个整型变量i,用于初始线性表的长度,再输入所有元素,选择菜单里的选项实现功能。插入:选择需插入元素的位置,插入位置及后面的元素后移一位,再插入元素;删除:选择要删除元素的位置,将要删除的元素移出顺序表,删除位置后的元素前移一位;查找:输入要查找的元素,按顺序查找,当查找到顺序表的第一个与要查找的元素相同时,输出结果。 四、程序的调试及运行结果 五、程序代码 #include initial(s); 示所有元素. " < /* 线性结构,线性表的顺序表示和实现 */ # include 实验报告 课程名称数据结构 实验项目实验一线性表的生成与操作 题目一顺序表和链表的创建与基本操作 系别___ _计算机学院 _ ______ 专业____计算机大类_ __ 班级/学号__(1406/2014011288)_____ 学生姓名 _______(孙文学)_________ 实验日期_(2015年10月19日) 成绩_______________________ 指导教师黄改娟 实验题目:实验一线性表的生成与操作 ------顺序表和链表的创建与基本操作(自己所选择实验题目,必 填) 一、实验目的 1)掌握线性表的顺序存储和链式存储结构; 2)验证顺序表及链表的基本操作的实现;(验证) 3)理解算法与程序的关系,能够将算法转换为对应程序; 4)体会线性表在实际应用中能够解决的问题。(设计、综合) 二、实验内容 1)根据实验一题目列表,选定题目,说明题目的主要需求; 2)结合所选定的题目,定义存储结构,并完成对应应用的线性表创建、插入、删除、 查找等基本操作的算法描述; 3)程序编码实现,并获得运行结果。 三、报告内容 1)实验题目及主要存储结构定义 (提示:请根据所选定题目,描述存储结构) 题目:顺序表和链表的创建及基本操作 顺序表我是采用数组存储的,链表是采用结构体存储的 2)结合题目,说明对相应线性表的基本操作算法描述 (提示:可用自然语言、流程图、伪代码等均可,要求对每一个操作,都给出具体的算法描述) 基本操作: #顺序表# (1)插入:在线性表中的x位置插入y----将x位置及之后的元素都往后挪一位,将y的值赋给a[x]. (2)删除:删除位置为x的元素----另y=a[x],然后x之后的元素都往前挪一位。 (3)查找:寻找值为y的元素----从a[0]开始,若a[i]==y,则返回i,否则i++。 #链表# (1)插入:当i小于要插入的位置x时,i++,插入p->data------p->next=s->next;s->next=p; (2)删除:当p->data不等于要删除的值x时,p=p->next; q=p->next; p->next=q->next; free(q); (3)查找:当p->data!=x时,p=p->next,找到之后返回p->data 3)程序源码 (提示:列出所编写程序的代码。如果利用图形界面IDE等编程,这里只要求写出关键操作的程序代码。此外,程序一定要有注释说明) 1.顺序表的基本操作(用数组实现) #include 数据结构实验一顺序表的实现 数据结构实验一顺序表的实现 班级学号姓名分数一、实验目的: 1. 熟悉线性表的基本运算在两种存储结构(顺序结构和链式结构)上的实现; 2. 以线性表的各种操作的实现为重点; 3. 通过本次学习帮助学生加深C语言的使用,掌握算法分析方法并对已经设 计 出的算法进行分析,给出相应的结果。 二、实验要求: 编写实验程序,上机运行本程序,保存程序的运行结果,结合程序进行分析并 写出实验报告。三、实验内容及分析: 1.顺序表的建立 建立一个含n个数据元素的顺序表并输出该表中各元素的值及顺序表的长度。 程序如下: 头文件SqList.h的内容如下: #include #define INFEASIBLE -1 #define OVERFLOW -2 typedef int ElemType; typedef int Status; typedef struct{ ElemType *elem; int length; int listsize; }SqList; Status InitList_Sq(SqList *L) { L->elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType)); if(!L->elem) return(OVERFLOW); L->length=0; L->listsize=LIST_INIT_SIZE; return OK; } Status CreatList_Sq(SqList *L,int n) 1 { int i; printf("输入%d个整数:\n",n); for(i=0;i 数据结构实验一 线性表的实现 一、实验目的: 1.熟悉线性表的基本运算在两种存储结构(顺序结构和链式结构)上的实现; 2.以线性表的各种操作的实现为重点; 3.通过本次学习帮助学生加深C语言的使用,掌握算法分析方法并对已经设计 出的算法进行分析,给出相应的结果。 二、实验要求: 编写实验程序,上机运行本程序,保存程序的运行结果,结合程序进行分析并写出实验报告。 三、实验内容及分析: 1.顺序表的建立 建立一个含n个数据元素的顺序表并输出该表中各元素的值及顺序表的长度。 程序如下: 头文件SqList.h的内容如下: #include数据结构顺序表真题
数据结构实验报告——顺序表链表的实现
数据结构- 顺序表的基本操作的实现-课程设计-实验报告
数据结构实现顺序表的各种基本运算(20210215233821)
数据结构顺序表的实现
数据结构实验2.1顺序表
实验一数据结构顺序表的插入和删除
数据结构C语言版 串的定长顺序存储表示和实现
顺序表的应用数据结构实验报告记录
数据结构实验报告-顺序表的创建、遍历及有序合并操作
数据结构实验一顺序表的实现
数据结构实验一_顺序表的基本操作实验报告
数据结构与算法-实现顺序表的基本操作
数据结构实验-顺序表的基本操作
数据结构实验一顺序表的实现
数据结构线性表的顺序表示和实现(C语言)概论
数据结构实验报告顺序表和链表
数据结构实验一顺序表的实现
数据结构实验一 线性表的实现