数据结构实现顺序表的各种基本运算(20210215233821)

合集下载

实现顺序表的各种基本运算的算法

实现顺序表的各种基本运算的算法

实现顺序表的各种基本运算的算法顺序表是一种基本的数据结构,它可以存储线性结构,支持随机访问,具有较好的存储效率。

在实际应用中,我们需要实现顺序表的各种基本运算,包括插入、删除、查找、遍历、排序等操作。

下面介绍一些实现顺序表基本运算的算法。

1.插入算法顺序表插入算法的基本思路是:将插入位置之后的所有元素向后移动一位,然后将待插入元素放入插入位置。

具体实现如下:```void Insert(SqList &L, int pos, int data){if (pos < 1 || pos > L.length + 1) // 插入位置非法return;if (L.length == L.MAXSIZE) // 顺序表已满return;for (int i = L.length; i >= pos; i--) // 将pos以后的元素依次后移,腾出pos位置L.data[i] = L.data[i - 1];L.data[pos - 1] = data; // 将新元素插入pos位置L.length++; // 顺序表长度+1}```2.删除算法顺序表删除算法的基本思路是:将待删除元素之后的所有元素向前移动一位,然后将顺序表长度减1。

具体实现如下:```void Delete(SqList &L, int pos){if (pos < 1 || pos > L.length) // 删除位置非法return;for (int i = pos; i < L.length; i++) // 将pos以后的元素依次前移,覆盖pos位置L.data[i - 1] = L.data[i];L.length--; // 顺序表长度-1}```3.查找算法顺序表查找算法的基本思路是:从表头开始逐个比较元素,直到找到目标元素或者搜索到表尾。

具体实现如下:```int Search(SqList L, int data){for (int i = 0; i < L.length; i++){if (L.data[i] == data) // 找到目标元素,返回其下标return i;}return -1; // 未找到目标元素,返回-1}```4.遍历算法顺序表遍历算法的基本思路是:从表头开始依次输出元素。

codeblock数据结构算法实现-顺序表基本操作

codeblock数据结构算法实现-顺序表基本操作

数据结构算法实现-顺序表基本操作序号一、引言二、顺序表的定义三、顺序表的基本操作1.初始化操作2.插入操作3.删除操作4.查找操作四、顺序表的实现五、总结一、引言数据结构是计算机科学中非常重要的一部分,它是计算机存储、组织数据的方式。

而顺序表是其中的一种基本数据结构,它采用一组位置区域连续的存储单元依次存放线性表中的元素。

本文将着重介绍顺序表的基本操作及其算法实现。

二、顺序表的定义顺序表是一种基本的线性表,顺序表中元素的逻辑顺序和物理顺序是一致的。

顺序表的特点是利用一组连续的存储单元依次存放线性表中的元素。

顺序表可以用数组实现,其元素在内存中是连续存储的,可以通过下标直接访问元素。

由于顺序表的存储方式,使得其在查找、插入和删除等操作上具有较好的性能。

三、顺序表的基本操作顺序表的基本操作包括初始化、插入、删除和查找等。

下面分别介绍这些操作的实现方法。

1.初始化操作初始化操作是指将一个空的顺序表初始化为一个具有初始容量的顺序表,并为其分配内存空间。

初始化操作的实现方法主要有两种,一种是静态分配内存空间,另一种是动态分配内存空间。

静态分配内存空间时,需要预先指定顺序表的容量大小,然后在程序中创建一个数组,并为其分配指定大小的内存空间。

动态分配内存空间时,可以根据需要动态创建一个数组,并为其分配内存空间。

下面是一个简单的初始化操作的实现示例:```C代码#define MAXSIZE 100 // 定义顺序表的最大容量typedef struct {ElementType data[MAXSIZE]; // 定义顺序表的元素数组int length; // 定义顺序表的当前长度} SeqList;2.插入操作插入操作是指将一个新元素插入到顺序表的指定位置。

插入操作的实现方法主要包括在指定位置插入元素,同时对其他元素进行后移操作。

下面是一个简单的插入操作的实现示例:```C代码Status Insert(SeqList *L, int i, ElementType e) {if (i < 1 || i > L->length + 1) { // 判断插入位置是否合法return ERROR;}if (L->length >= MAXSIZE) { // 判断顺序表是否已满return ERROR;}for (int j = L->length; j >= i; j--) { // 插入位置及之后的元素后移L->data[j] = L->data[j - 1];}L->data[i - 1] = e; // 插入新元素L->length++; // 顺序表长度加1return OK;}```3.删除操作删除操作是指将顺序表中指定位置的元素删除。

顺序表得建立和基本算法

顺序表得建立和基本算法

顺序表的建立和基本算法一、定义和特点顺序表是一种数据结构,它可以存储一组有序的元素。

顺序表的特点如下: 1. 元素之间具有线性顺序关系,即元素排列有固定的顺序。

2. 顺序表中的元素在内存中是连续存储的,可以通过下标直接访问元素。

3. 顺序表的长度是固定的,即一旦创建就无法动态增加或减少。

二、顺序表的实现方式顺序表可以用数组来实现,也可以用链表来实现。

下面分别介绍这两种实现方式。

1. 数组实现顺序表数组实现顺序表的主要思想是用一个一维数组来存储元素,并使用一个整数变量记录数组中的元素个数。

数组实现顺序表的优点是访问元素快速,缺点是插入和删除元素比较慢。

数组实现顺序表的基本操作包括: - 创建顺序表 - 销毁顺序表 - 获取顺序表的长度 - 获取指定位置的元素 - 插入元素到指定位置 - 删除指定位置的元素 - 查找元素的位置2. 链表实现顺序表链表实现顺序表的主要思想是将元素存储在节点中,并使用指针将节点连接起来。

链表实现顺序表的优点是插入和删除元素快速,缺点是访问元素比较慢。

链表实现顺序表的基本操作包括: - 创建顺序表 - 销毁顺序表 - 获取顺序表的长度 - 获取指定位置的元素 - 插入元素到指定位置 - 删除指定位置的元素 - 查找元素的位置三、顺序表的基本算法1. 顺序表的遍历顺序表的遍历操作是指依次访问表中的每个元素。

遍历顺序表的基本算法如下:for (int i = 0; i < length; i++) {// 对每个元素进行操作}2. 顺序表的插入顺序表的插入操作是指将一个元素插入到指定位置。

插入元素的基本算法如下:if (position < 0 || position > length) {// 位置无效,插入失败return false;}if (length >= size) {// 顺序表已满,插入失败return false;}for (int i = length - 1; i >= position; i--) {// 将position及其后面的元素后移一位data[i + 1] = data[i];}data[position] = value; // 在指定位置插入新元素length++; // 长度加1return true; // 插入成功3. 顺序表的删除顺序表的删除操作是指将指定位置的元素删除。

数据结构C语言_顺序表的基本操作

数据结构C语言_顺序表的基本操作

#include <stdio.h>#include <stdlib.h>#define LIST_INT_SIZE 100#define LISTINCREMENT 10typedef struct{int *elem;int data[10];int length;int listsize;}SqList;int InitList_Sq(SqList *L){L->elem=(int *)malloc(LIST_INT_SIZE*sizeof(int)); L->elem=L->data;if(!L->elem)exit(-2);L->length=0;L->listsize=LIST_INT_SIZE;return 1;}void creat(SqList *L){int a,i;printf("请输入要创建的元素的个数:"); scanf("%d",&a);for(i=0;i<a;i++){printf("请输入第%d个元素:",i+1); scanf("%d",&L->data[i]);L->length++;}}void show(SqList L){int i;printf("线性表中的元素为:\n");for(i=0;i<L.length;i++)printf("%d\t",L.data[i]);printf("\n");}int alter(SqList *L,int i,int e){int *p;p=&(L->elem[i-1]);*p=e;return 1;}int ListInsert_Sq(SqList *L,int i,int e){int *q,*p;q=&(L->elem[i-1]); //q为插入位置for (p=&L->elem[L->length-1]; p>=q; --p)*(p+1)=*p; //插入位置之后的元素右移*q=e; //插入e++L->length; //表长增1printf("线性表中第%d个位置插入一个数%d后:\n",i,e);return 1;} //ListInsert_Sqint ListDelete_Sq(SqList *L,int i,int *e){int *q,*p;if (i<1||i>L->length) return 0; //i值不合法p=&(L->elem[i-1]);//p为被删除元素的位置*e=*p; //被删除元素的值赋给eq=L->elem+L->length-1;//表尾元素的位置for(++p;p<=q;++p) *(p-1)=*p; //被删除元素之后的元素左移 --L->length; //表长减1printf("线性表中第%d个位置删除一个数%d后:\n",i,*e);return 1;}//ListDelete_Sqint main(){int i,e;SqList L;InitList_Sq(&L);printf("线性表初始化,长度为:%d,容量为:%d\n",L.length,L.listsize); creat(&L);show(L);printf("输入要修改数的位置和数值:");scanf("%d %d",&i,&e);alter(&L,i,e);show(L);printf("输入插入数的位置和数值:");scanf("%d %d",&i,&e);ListInsert_Sq(&L,i,e);show(L);printf("输入删除数的位置:");scanf("%d",&i);ListDelete_Sq(&L,i,&e);show(L);return 0;}。

数据结构-顺序表和链表的基本操作

数据结构-顺序表和链表的基本操作
cout<<"\t\t\t"<<" "<<"此表是空表"<<endl; else
cout<<"\t\t\t"<<" "<<"此表不是空表"<<endl; } void GetElem(SqList *L) {
if(L->length==0) {
cout<<"\t\t\t"<<" "<<"顺序表是空表,请选择其他操作"<<endl; return; } cout<<"\t\t\t"<<" "<<"给出指定位置:"; int i; while(cin>>i) { if(i<1||i>L->length)
caseListInserts:cout<<"\t\t\t"<<" "<<"8 在指定位置插入元素"<<endl; ListInsert(L);
break; case ListDeletes:cout<<"\t\t\t"<<" "<<"9 删除指定位置的元素"<<endl;
ListDelete(L); break;
case ListNexts:cout<<"\t\t\t"<<" "<<"12 求给定元素的后继"<<endl; ListNext(L); break;

最新实现顺序表各种基本运算的算法备课讲稿

最新实现顺序表各种基本运算的算法备课讲稿

实现顺序表各种基本运算的算法要求:编写一个程序(algo2_1.cpp)实现顺序表的各种基本操作,并在此基础上设计一个主程序(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/*文件名:exp2-1.cpp*/#include <stdio.h>#include <malloc.h>#define MaxSize 50typedef char ElemType;typedef struct{ElemType elem[MaxSize];int length;} SqList;extern void InitList(SqList *&L);extern void DestroyList(SqList *L);extern int ListEmpty(SqList *L);extern int ListLength(SqList *L);extern void DispList(SqList *L);extern int GetElem(SqList *L,int i,ElemType &e);extern int LocateElem(SqList *L, ElemType e);extern int ListInsert(SqList *&L,int i,ElemType e);extern int ListDelete(SqList *&L,int i,ElemType &e);void main(){SqList *L;ElemType e;printf("(1)初始化顺序表L\n");InitList(L);printf("(2)依次采用尾插法插入a,b,c,d,e元素\n");ListInsert(L,1,'a');ListInsert(L,2,'b');ListInsert(L,3,'c');ListInsert(L,4,'d');ListInsert(L,5,'e');printf("(3)输出顺序表L:");DispList(L);printf("(4)顺序表L长度=%d\n",ListLength(L));printf("(5)顺序表L为%s\n",(ListEmpty(L)?"空":"非空"));GetElem(L,3,e);printf("(6)顺序表L的第3个元素=%c\n",e);printf("(7)元素a的位置=%d\n",LocateElem(L,'a'));printf("(8)在第4个元素位置上插入f元素\n");ListInsert(L,4,'f');printf("(9)输出顺序表L:");DispList(L);printf("(10)删除L的第3个元素\n");ListDelete(L,3,e);printf("(11)输出顺序表L:");DispList(L);printf("(12)释放顺序表L\n");DestroyList(L);}2019年7月西交《英语2(新录)》在线作业1、Hello,mayItalktotheheadmasternow?—______________.A.Sorry,heisbusyatthemomentB.No,youcan’tC.Sorry,youcan’tD.Idon’tknow正确答案:A2、DoyouthinkIcouldborrowyourdictionary?—__________________.A.Yes,youmayborrowB.Yes,goonC.Yes,helpyourselfD.Itdoesn’tmatter正确答案:C3、WhatcanIdoforyou,madam?—__________________.A.IwantakiloofapplesB.YoucangoyourownwayC.ThanksD.Excuseme.I’mbusy正确答案:A4、Doyoumindtellingmewhereyou’refrom?—__________________.A.Certainly.I’mfromLondonB.Sure.IwasborninLondonC.Notreally,youcandoitD.Certainlynot.I’mfromLondon正确答案:A5、MayIseethemenu,please?I’vebeenwaitinganhouralready—__________________A.Thatisthemenu,sirB.Yes,pleasegoonC.Hereyouare,sirD.Ofcourse,sir。

实现顺序表的各种基本运算的算法

实现顺序表的各种基本运算的算法

实现顺序表的各种基本运算的算法1. 初始化顺序表算法实现:初始化操作就是将顺序表中所有元素的值设置为默认值,对于数值类型,可以将其设置为0,对于字符类型,可以将其设置为空格字符。

初始化的时间复杂度为O(n),其中n为顺序表的长度。

2. 插入操作算法实现:顺序表的插入操作就是在指定位置上插入一个元素,需要将该位置后面的元素全部后移,在指定位置上插入新元素。

若顺序表已满,则需要进行扩容操作,将顺序表长度扩大一倍或者按一定的比例扩大。

插入操作的时间复杂度为O(n),其中n为顺序表长度。

3. 删除操作算法实现:顺序表的删除操作需要将指定位置上的元素删除,并将该位置后面的元素全部前移。

删除操作后,如果顺序表的实际长度小于等于其总长度的1/4,则需要进行缩容操作,将顺序表长度缩小一倍或者按一定的比例缩小。

删除操作的时间复杂度为O(n),其中n为顺序表长度。

4. 修改操作算法实现:顺序表的修改操作就是将指定位置上的元素赋予新的值。

修改操作的时间复杂度为O(1)。

5. 查找操作算法实现:顺序表的查找操作就是在顺序表中找到指定位置的元素,并返回其值。

查找操作的时间复杂度为O(1)。

6. 遍历操作算法实现:顺序表的遍历操作就是依次访问顺序表中的每个元素,遍历操作的时间复杂度为O(n),其中n为顺序表的长度。

7. 合并操作算法实现:顺序表的合并操作就是将两个顺序表合并成一个新的顺序表,新的顺序表的长度为两个顺序表的长度之和。

合并操作的时间复杂度为O(n),其中n为两个顺序表的长度之和。

总结:顺序表是一种简单而高效的数据结构,其基本运算包括初始化、插入、删除、修改、查找、遍历和合并等操作。

其中,插入、删除、遍历和合并操作的时间复杂度比较高,需要进行相应的优化处理。

同时,在实际应用中,还需要注意顺序表的扩容和缩容操作,避免造成资源浪费或者性能下降。

顺序表基本操作的实现代码

顺序表基本操作的实现代码

顺序表基本操作的实现代码1. 顺序表简介顺序表是一种常见的数据结构,它通过用一组连续的内存空间来存储元素,从而支持快速随机访问。

每个元素在内存中占据固定的空间大小,并按照顺序依次存储在表中。

顺序表有两个重要特点:固定容量和线性有序。

在顺序表的基本操作中,我们需要实现插入、删除、查找和遍历等功能。

这些操作的实现代码通常都比较简单,但需要考虑到许多细节问题。

下面我们将逐一介绍这些基本操作的实现思路和代码。

2. 顺序表的数据结构定义首先,我们需要定义顺序表的数据结构,这里我们可以借助结构体来完成:``` #define MAXSIZE 100 // 顺序表的最大容量typedef struct { int data[MAXSIZE]; // 存储元素的数组 int length; // 当前元素个数 } SqList; ```其中,MAXSIZE为顺序表的最大容量,data数组用于存储元素,length表示当前元素个数。

3. 顺序表的基本操作实现3.1 插入操作插入操作是将一个元素插入到顺序表的指定位置。

对于非空的顺序表,我们可以在指定的下标位置前面插入。

这需要将原位置以及后面的元素全部向后移动一位。

具体实现思路如下:``` bool Insert(SqList &L, int i, int e){ // 首先判断i的值是否合法 if (i < 1 ||i > L.length + 1 || L.length >= MAXSIZE){ return false; } // 将i及其后面的元素全部向后移动一位 for (int j = L.length;j >= i; j--) { L.data[j] = L.data[j -1]; } // 在i的位置插入元素e L.data[i - 1] = e; L.length++; return true; } ```在这个实现代码中,我们首先判断i的合法性,然后循环将i及其后面的元素全部向后移动一位,然后在i的位置插入元素e。

顺序表的建立与基本算法

顺序表的建立与基本算法

顺序表的建立与基本算法
顺序表是一种非常重要的数据结构,它的基本算法包括分配、搜索、插入和删除操作。

首先,在建立顺序表之前,必须确定表的存储空间大小,一般情况下,可以申请一个等容量的存储空间,这样表格中的元素可以按照其逻辑关系依次放置,然后把表格所占据的空间当做顺序表,也可以开辟一个足够大的存储空间而不用一次性申请,当存储空间不足时,可以再次申请分配新的存储空间。

其次,顺序表的搜索操作可以采用顺序搜索和二分搜索两种方法进行,顺序搜索的算法从表的第一个元素开始,依次比较元素的值是否匹配,若匹配,就可以找到目标;而二分搜索把顺序表看做一个有序表,先把中间位置的元素和目标元素比较,比目标元素小则在前半部分查找,大则在后半部分查找;如果中间元素就是目标,则搜索结束。

第三,顺序表的插入操作一般分为有序表的插入和无序表的插入两种,有序表的插入是在表中先找到比新元素大的元素,然后把新元素插入到该位置前面;而无序表的插入是先找到一个空的存储空间,然后将目标元素插入。

最后,顺序表的删除操作也可以分为有序表的删除和无序表的删除两种,有序表的删除是先搜索目标元素,然后把后一个元素覆盖前一个元素,再删除最后一个元素;而无序表的删除是直接将目标元素清除,然后用最后一个元素覆盖清除空间。

总之,顺序表的建立和基本算法,包括:分配、搜索、插入和删除操作,这些操作均可以在顺序表的存储空间中进行,并利用适当的算法实现目标操作,使得顺序表能够高效地完成计算任务,因此,对顺序表的建立和基本算法的理解是一项必备的技能。

顺序表各种基本运算

顺序表各种基本运算
}
第二个类:
public class SeqList implements List{
final int defaultSize=10;
int maxSize;
int size;
Object[]listArray;
public SeqList(){
initiate(defaultSize);
}
public SeqList(int size){
for(int j=i;j<size-1;j++);
size--;
return it;
}
public Object getData(int i)throws Exception{
if(i<0||i>=size){
throw new Exception("参数错误");
}
return listArray[i];
else
System.out.println("顺序表L不为空");
System.out.println("顺序表L的第3个元素:"+L.getData(2));
if(L.MoreDataDelete(L,'d')==0)
System.out.println("顺序表L中没有'd'");
else
System.out.println("顺序表L中有'd'");
}
public int size(){
return size;
}
public boolean isEmpty(){
return size==0;

数据结构—顺序表的基本操作

数据结构—顺序表的基本操作

数据结构—顺序表的基本操作#include<iostream>using namespace std;#define MaxSize 10typedef struct SqList {int data[MaxSize];int length;}SqList;// 初始化⼀个顺序表void InitList(SqList &L){for (int i=0; i<MaxSize; i++)L.data[i] = 0;L.length = 0;}// 在顺序表的第i个位置插⼊元素ebool ListInsert(SqList &L, int i, int e){if (i<1 || i>L.length+1) // 判断i的范围是否有效return false;if (L.length >= MaxSize) // 当前存储空间已满,不能插⼊return false;for (int j=L.length; j>=i; j--) // 将第i个元素及以后的元素后移L.data[j] = L.data[j-1];L.data[i-1] = e; // 在位置i放⼊元素eL.length ++; // 长度加·1return true;}// 在顺序表的第i个位置插⼊元素ebool ListDelete(SqList &L, int i, int &e){if (i<1 || i>L.length) // 判断i的范围是否有效return false;e = L.data[i-1]; // 将被删除的元素赋值给efor (int j=i; j<L.length; j++) // 将第i个位置后的元素前移L.data[j-1] = L.data[j];L.length --; // 长度加·1return true;}// 按位置查找元素, 返回元素值int GetElem(SqList L, int i){if (i<1 || i>L.length) // 判断i的范围是否有效return 0;return L.data[i-1];}// 按值查找元素,返回元素的位置int LocElem(SqList L, int e){for (int i=0; i<L.length; i++)if (L.data[i] == e)return i+1;return 0;}int main(){SqList L;InitList(L); // 初始化ListInsert(L,1,1); // 插⼊元素ListInsert(L,2,2); // 插⼊元素ListInsert(L,3,3); // 插⼊元素int e = -1;ListDelete(L,2,e); // 删除元素cout << "delete element: " << e << endl;int a = GetElem(L, i); // 按位置查找元素int b = LocElem(L, e); // 按值查找元素for (int i=0; i<L.length; i++)cout << "data[" << i << "]=" << L.data[i] << endl;return 0;}。

数据结构编程实现顺序表的基本操作

数据结构编程实现顺序表的基本操作

数据结构编程实现顺序表的基本操作顺序表是一种基础的数据结构,它是线性表的一种实现方式,它采用连续存储结构来存储线性表的元素。

顺序表中的数据元素存储往往是数值型,它通常用于存储数组和队列等数据结构。

今天我们来学习顺序表的基本操作及其编程实现。

第一步:定义顺序表在编写顺序表的基本操作之前,我们需要先定义一个顺序表的数据结构。

这里我们可以使用结构体来定义一个顺序表的数据类型:```typedef struct {int *data; // 存储空间的基地址int length; // 顺序表的长度int max_size; // 顺序表可存储的最大元素个数} SeqList;```以上定义了一个SeqList结构体类型,包含三个成员:data表示存储空间的基地址,length表示顺序表的元素个数,max_size表示顺序表可存储的最大元素个数。

其中,data采用动态分配内存的方式,可以根据实际需要动态调整顺序表的大小,max_size则是由用户在创建顺序表时指定的。

第二步:实现顺序表的基本操作顺序表的基本操作包括初始化、插入、删除、查找、获取元素等。

下面分别介绍这些操作的实现方法。

1. 初始化操作初始化操作用于创建一个空的顺序表。

它的实现方法如下:```SeqList* init_seq_list(int max_size) {SeqList *list = (SeqList*)malloc(sizeof(SeqList)); // 申请存储空间if (!list) { // 内存申请失败printf("Error: Out of memory!\n");return NULL;}list->data = (int*)malloc(sizeof(int) * max_size); // 申请存储数据的空间if (!list->data) { // 内存申请失败printf("Error: Out of memory!\n");free(list); // 释放存储空间return NULL;}list->length = 0; // 空表长度为0list->max_size = max_size; // 顺序表可存储的最大元素个数 return list; // 返回顺序表指针}```在初始化过程中,我们先申请存储空间,然后再申请存储数据的空间,最后将顺序表的长度设为0,顺序表可存储的最大元素个数设为max_size,返回顺序表的指针。

实现顺序栈的各种基本运算的算法实验原理

实现顺序栈的各种基本运算的算法实验原理

实现顺序栈的各种基本运算的算法实验原理一、引言顺序栈是一种常见的数据结构,它的特点是栈中元素的存储是连续的。

顺序栈的基本运算包括入栈、出栈、判空和获取栈顶元素等。

本文将详细介绍实现顺序栈各种基本运算的算法实验原理。

二、顺序栈的定义顺序栈是由一个一维数组和一个栈顶指针组成的数据结构。

栈顶指针指向栈顶元素的位置,当栈为空时,栈顶指针为-1;当栈满时,栈顶指针等于数组的长度减1。

三、顺序栈的入栈操作入栈操作是将一个元素压入栈中。

具体步骤如下:1. 判断栈是否已满,如果满则提示栈已满,无法进行入栈操作;2. 栈顶指针加1;3. 将待入栈的元素存入栈顶指针所指向的位置。

四、顺序栈的出栈操作出栈操作是将栈顶元素删除并返回。

具体步骤如下:1. 判断栈是否为空,如果为空则提示栈已空,无法进行出栈操作;2. 获取栈顶元素的值;3. 栈顶指针减1。

五、顺序栈的判空操作判空操作是判断栈是否为空。

具体步骤如下:根据栈顶指针的值来判断,如果栈顶指针为-1,则表示栈为空,否则表示栈非空。

六、顺序栈的获取栈顶元素操作获取栈顶元素操作是获取栈顶元素的值,但不删除。

具体步骤如下:1. 判断栈是否为空,如果为空则提示栈已空,无法获取栈顶元素;2. 获取栈顶元素的值。

七、顺序栈的算法实现下面以C语言为例,给出顺序栈的算法实现:1. 定义顺序栈的数据结构typedef struct {int top; // 栈顶指针int maxSize; // 栈的最大容量int* data; // 栈的数据存储区} SeqStack;2. 初始化顺序栈void initStack(SeqStack* stack, int maxSize) {stack->top = -1;stack->maxSize = maxSize;stack->data = (int*)malloc(maxSize * sizeof(int)); }3. 入栈操作void push(SeqStack* stack, int value) {if (stack->top == stack->maxSize - 1) {printf("栈已满,无法进行入栈操作\n");return;}stack->top++;stack->data[stack->top] = value;}4. 出栈操作int pop(SeqStack* stack) {if (stack->top == -1) {printf("栈已空,无法进行出栈操作\n");return -1;}int value = stack->data[stack->top];stack->top--;return value;}5. 判空操作int isEmpty(SeqStack* stack) {return stack->top == -1;}6. 获取栈顶元素操作int top(SeqStack* stack) {if (stack->top == -1) {printf("栈已空,无法获取栈顶元素\n");return -1;}return stack->data[stack->top];}八、实验原理1. 实验目的:通过实现顺序栈的各种基本运算,加深对顺序栈的理解,并掌握顺序栈的操作原理和算法实现。

实现顺序表各种基本运算的算法复习进程

实现顺序表各种基本运算的算法复习进程

实现顺序表各种基本运算的算法
实现顺序表各种基本运算的算法
要求:编写一个程序(algo2_1.cpp)实现顺序表的各种基本操作,并在此基础
上设计•个主程序(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

(⑵释放顺序表L
/* 文件名:exp2-1.cpp*/
#i nclude <stdio.h>
#i nclude <malloc.h>
#defi ne MaxSize 50
typedef char ElemType;
typedef struct
{
ElemType elem[MaxSize]; int len gth;
} SqList;
extern void In itList(SqList *&L); exter n void DestroyList(SqList *L); exter n int ListEmpty(SqList *L);
extern int ListLe ngth(SqList *L);
仅供学习与交流,如有侵权请联系网站删除谢谢2。

数据结构之顺序表的实现

数据结构之顺序表的实现

数据结构之顺序表的实现数据结构之顺序表的实现⼀、原理1.定义顺序表是在计算机中以数组形式保存的。

2.特点在计算机中占⽤连续的⼀段内存⼀旦声明,空间⼤⼩⼀般不变⼆、初始化相关操作包括:1. 结构体的定义2. 顺序表的创建3. 顺序表清空4. 判断顺序表是否为空1.结构体定义即定⼀个满⾜顺序表定义的结构体,其中包含数组、存储长度、总长度。

typedef int ElemType; //将int抽象为ElemType,表明顺序表也可以存储其他类型(如将int改为char)struct List{ElemType *list;//声明数组⽤于给顺序表存储数据,等价于以下声明⽅式//ElemType[] list;int length; //⽤于记录顺序表存储的数据长度int MaxSize; //⽤于记录顺序表最⼤长度(即最多存储数据)}2.初始化对顺序表进⾏初始化,包括分配⾃定义长度的数组空间,设定存储长度为0,存储长度为规定值//初始化,传⼊需要初始化的顺序表和初始化长度void InitList(struct List *L,int maxSize){//初始化长度合法性判断if(maxSize<0){printf("初始化长度⾮法!\n");exit(1); //退出程序}//对顺序表长度进⾏赋值L->MaxSize = maxSize;//根据初始化长度和存储数据类型来动态分配数组L->list = malloc(sizeof(maxSize*sizeof(ElemType)));//分配成功判定if(!L->list){printf("动态分配存储失败\n");exit(1);}//初始化存储数据为0个L->length = 0;}3.清空将顺序表内容清空,⽤于某些题⽬要求或节省空间//清空,传⼊需要清空的顺序表void ClearList(struct List *L){//判断顺序表是否已经为空if(L->list!=NULL){free(L->list); //释放顺序表中数组内存L->list = 0;L->length = 0;L->MaxSize = 0;}}4. 判断是否为空判断顺序表是否为空,在某些操作之前,先要判断顺序表是否为空,防⽌出错int isEmpty(struct List *L){return L->length==0?1:0; //顺序表最⼤长度为0则为空返回1,否则返回0}三、增加相关操作包括:1. 向表头插⼊元素x2. 向表尾插⼊元素x3. 向第n个位置插⼊元素x4. 向递增的线性表中插⼊元素x,之后仍然保持有序进⾏操作之前,还需要⼀个⽅法,当插⼊元素超过数组长度时,将数组容量扩⼤,即重新申请空间Tip:将顺序表扩⼤⼀倍空间void ReMalloc(struct List *L){ElemType *p = realloc(L->list,2*L->MaxSize*sizeof(ElemType));if(!p){printf("空间分配失败\n");exit(1);}L->list = p; //使list重新指向新⽣成的空间L->MaxSize = 2*L->MaxSize;printf("存储空间已经扩⼤为2倍\n");}1.向表头插⼊元素xvoid insertElemToHead(struct List *L,ElemType x){int i;//判断存储空间是否已满if(L->length==L->MaxSize){printf("存储空间已满,重新分配中...");ReMalloc(L);}//所有元素后移for(i=L->length;i>0;i--){L->list[i+1]=L->list[i];}L->list[i]=x;L->length++;}2.向表尾插⼊元素xvoid insertElemToTail(struct List *L,ElemType x){//判断存储空间是否已满if(L->length==L->MaxSize){printf("存储空间已满,重新分配中...");ReMalloc(L);}L->list[L->length++]=x;}3.向线性表L的第n个位置插⼊元素xvoid insertElemSomewhere(struct List *L,ElemType x,int n){//判断存储空间是否已满if(L->length==L->MaxSize){printf("存储空间已满,重新分配中...");ReMalloc(L);}int i;for(i=L->length;i>=n;i--){L->list[i] = L->list[i-1];}L->list[i] = x;L->length--;}四、删除相关操作包括:1. 删除表头元素并返回被删除的值2. 删除第n个元素并返回被删除元素3. 从线性表L中删除值为X的第⼀个元素1.删除表头元素并返回被删除的值删除表头第⼀个元素,长度减少1,返回被删除的值ElemType delHeadElem(struct List *L){ElemType x = L->list[0];//合法性判断if(L->length==0){printf("线性表为空,不能删除\n");exit(1);}for(int i=0;i<L->length;i++){L->list[i] = L->list[i+1];}L->length--;return x;}2.删除第n个元素并返回被删除元素ElemType delSomeElem(struct List *L,int n){if(n<L->length){printf("n位置越界,不能删除");exit(1);}ElemType x = L->list[n-1];for(int i=n;i<L->length;i++){L->list[i]=L->list[i+1];}L->length--;retur x;}3.从线性表L中删除值为X的第⼀个元素从线性表L中删除值为X的第⼀个元素,若删除成功则返回1,否则返回0 int delElemKnown(struct List *L,ElemType x){int i,j;//先找出值为X的下标for(i=0;i<L->length;i++){if(L->list[i]==x){break;}}for(j=i;i<L->length;j++){L->list[j]=L->list[j+1];}L->length--;return 1;}五、修改相关操作包括:1. 把线性表中第n个元素修改为x1.把线性表中第n个元素修改为x把线性表中第n个元素修改为x,若成功则返回1,失败返回0int updateElemKnown(struct List *L,ElemType x,int n){if(n>L->length||n<1){return 0;}L->list[n]=x;return 1;}六、查找相关操作包括:1. 查找第n个位置的值2. 顺序遍历输出所有值3. 返回值等于x的下标1.查找第n个位置的值输⼊要查找的坐标,若合法则范围对应的值,若⾮法则提⽰并推出int getElem(struct List *L,int n){if(n<0||n>L->MaxSize){printf("查找位置超出长度!\n");exit(1);}return L->list[n-1]; //n-1的原因是查找的第n个是从1开始计数,⽽数组是从0开始计数}2.顺序遍历输出所有值输出顺序表中的所有值void getAll(struct List *L){int i = 0;while(i<L->length){printf(L->list[i]+"\t");i++;}printf("\n");}3.查找值为x的节点并返回其坐标输⼊要查找的值x,若存在则范围⾸次出现的下标,否则返回0 void findElem(struct List *L,ElemType x){int i;for(i=0;i<L->length;i++){if(L->list[i]==x){return i;}}}七、总结1.优点查找⽅便空间利⽤率⾼2.缺点删除和增加操作效率低空间固定,不易扩展⼋、完整代码#include "stdio.h"#include <stdlib.h>/*** =======顺序表的定义=========*/typedef int ElemType;//结构体定义struct List{ElemType *list;//存储数据int length;//存储长度int MaxSize;//最⼤长度};//初始化void initList(struct List *L,int maxSize){//初始化长度合法性判断if(maxSize<0){printf("初始化长度⾮法!\n");exit(1); //退出程序}L->MaxSize = maxSize;L->list = malloc(sizeof(maxSize* sizeof(ElemType)));//判断分配空间是否成功if(!L->list){printf("空间分配失败");exit(1);}L->length=0;}//清空void clearList(struct List *L){if(L->list!=NULL){free(L->list);L->list=0;L->MaxSize=0;L->length=0;}}//判空int isEmpty(struct List *L){return L->length==0?1:0;}/*** =======增加操作=========*///空间再分配void reMalloc(struct List *L){ElemType *p = realloc(L->list,2*L->MaxSize* sizeof(ElemType)); if(!p){printf("空间分配失败");exit(1);}L->list = p;L->MaxSize = 2*L->MaxSize;printf("空间已扩⼤两倍");}//向表头插⼊元素void insertElemToHead(struct List *L,ElemType x){if(L->length==L->MaxSize){reMalloc(L);printf("空间已满,重新分配中");}for(int i=L->length;i>0;i++){L->list[i-1] = L->list[i];}L->list[0] = x;L->length++;}//向表尾插⼊元素void insertElemToTail(struct List *L,ElemType x){if(L->length==L->MaxSize){reMalloc(L);printf("空间已满,重新分配中");}L->list[L->length++] = x;}//向线性表L的第n个位置插⼊元素xvoid insertElemSomewhere(struct List *L,ElemType x,int n){ int i;if(L->length==L->MaxSize){reMalloc(L);printf("空间已满,重新分配中");}for(i=L->length;i>=n;i--){L->list[i]=L->list[i-1];}L->list[i]=x;L->length++;}/*** =======删除操作=========*///删除表头元素并返回被删除的值void delHeadElem(struct List *L){ElemType x = L->list[0];if(L->length==0){printf("顺序表为空,删除失败!");exit(1);}for(int i=1;i<L->length;i++){L->list[i-1] = L->list[i];}L->length--;}//删除第n个元素并返回被删除元素ElemType delSomeElem(struct List *L,int n){ElemType x = L->list[n-1];if(n>L->length){printf("n位置越界,不能删除");exit(1);}for(int i=n;i<L->length;i++){L->list[i-1] = L->list[i];}L->length--;return x;}//从线性表L中删除值为X的第⼀个元素int delElemKnown(struct List *L,ElemType x){int i,j;for(i=0;i<L->length;i++){if(L->list[i]==x){break;}}for(j=i;j<L->length;j++){L->list[j]=L->list[j+1];}L->length--;return 1;}/*** =======修改操作=========*///把线性表中第n个元素修改为xint updateElemKnown(struct List *L,ElemType x,int n){if(n>L->length||n<1){return 0;}L->list[n]=x;return 1;}/*** =======查找操作=========*///查找第n个位置的值int getElem(struct List *L,int n){if(n<0||n>L->MaxSize){printf("查找位置超出长度!\n");exit(1);}return L->list[n-1]; //n-1的原因是查找的第n个是从1开始计数,⽽数组是从0开始计数 }//顺序遍历输出所有值void getAll(struct List *L){int i = 0;while(i<L->length){printf("%d\t",L->list[i]);i++;}printf("\n");}//查找值为x的节点并返回其坐标int findElem(struct List *L,ElemType x){int i;for(i=0;i<L->length;i++){if(L->list[i]==x){return i;}}}//主函数int main(){//初始化操作测试struct List L;initList(&L,20);//插⼊操作测试insertElemToHead(&L,2);insertElemSomewhere(&L,4,2);insertElemToTail(&L,5);printf("%d\n",L.list[0]);printf("%d\n",L.list[1]);//删除操作测试delElemKnown(&L,2);printf("%d\n",L.list[0]);//修改操作测试updateElemKnown(&L,8,1);//查找操作测试printf("%d\n",getElem(&L,2));printf("%d\n",findElem(&L,8));printf("%d\n",L.list[0]);getAll(&L);}。

数据结构-线性表顺序存储结构上的基本运算实现(详解)

数据结构-线性表顺序存储结构上的基本运算实现(详解)

数据结构-线性表顺序存储结构上的基本运算实现(详解)查找操作算法思想查找运算可采⽤顺数查找,即从第⼀个元素开始,依次将表中的的元素与所要查找的元素进⾏⽐较,如果相等,则查找成功。

如果查找成功输出相应的提⽰信息,反之也给予相应的提⽰信息。

算法实现#include<stdio.h>#include<stdlib.h>#define MAX 20typedef struct{int *elem;int length;int listsize;}SqList;void CreatList(SqList &L){//建⽴⼀个线性表L.elem=(int *)malloc(MAX * sizeof(int)); //动态数组空间分配if(!L.elem) //! 是“⾮”的意思,如果没被分配空间就结束程序。

return;//exit(0)L.listsize=MAX;printf("输⼊表的长度:");scanf("%d",&L.length);printf("输⼊%d个数:",L.length);for(int i=0;i<L.length;i++)scanf("%d",&L.elem[i]);}void Traverse(SqList L){//遍历printf("表中数据为:");for(int i=0;i<L.length;i++)printf("%3d",L.elem[i]);printf("\n");}void LocateElem(SqList L,int e){//查找int i;printf("输⼊查找的元素:");scanf("%d",&e);for(i=0;i<L.length;i++){if(L.elem[i]==e){printf("查找成功,查找元素为%d",L.elem[i]);printf("\n");return;// =return 0;相当于是退出程序}}printf("查找失败");printf("\n");}int main(void){SqList L;CreatList(L);Traverse(L);LocateElem(L,1);return0;}运⾏演⽰算法⼩结⾸先要先创建⼀个线性表。

数据结构(C语言版)顺序表相关算法代码实现

数据结构(C语言版)顺序表相关算法代码实现

数据结构(C语⾔版)顺序表相关算法代码实现 这两天实现了⼀下顺序表的相关操作,包括顺序表初始化、创建、遍历、第i个元素前插⼊,删除第i个元素、查找元素e的位置、清空顺序表、销毁顺序表、合并两个⾮递减顺序表操作。

这次在⽹上学习到了新的布局⽅法,将顺序表的存储结构定义,函数说明部分放在了头⽂件⾥,源⽂件中实现的是主函数和各功能函数。

这次使⽤的编译环境是vc++6.0//头⽂件部分#define LIST_INIT_SIZE 5#define INCREAMENT 5typedef char Elemtype;typedef int Status;//线性表存储结构定义typedef struct {Elemtype *elem;int length;int listsize;}SqList;//函数说明部分Status InitList(SqList &L);Status CreateList(SqList &L,int size);Status TraverseList(SqList L);Status ListInsert(SqList &L,int i,Elemtype e);Status ListDelete(SqList &L,int i,Elemtype &e);int LocateElem(SqList L,Elemtype e,Status (*compare)(Elemtype e,Elemtype temp));Status ClearList(SqList &L);Status DestroyList(SqList &L);Status EqualElem(Elemtype e,Elemtype temp);void MergeList(SqList La,SqList Lb,SqList &Lc);//源⽂件部分#include<stdio.h>#include <stdlib.h>//malloc函数包含在其中//将⾃定义头⽂件包含进来时只能⽤""#include"ListHeader.h"//程序⼊⼝void main(){int size=6;SqList list;Elemtype deletes;InitList(list);CreateList(list,size);// TraverseList(list);// ListInsert(list,5,'o');// TraverseList(list);// ListDelete(list,5,deletes);// TraverseList(list);// printf("找到符合compare关系的元素位序是:%d\n",LocateElem(list,'b',EqualElem));// ClearList(list);// TraverseList(list);// DestroyList(list);// TraverseList(list);SqList list2;InitList(list2);CreateList(list2,5);SqList list3;InitList(list3);MergeList(list,list2,list3);TraverseList(list3);getchar();}//初始化⼀个顺序表Status InitList(SqList &L){//分配内存L.elem = (Elemtype *)malloc(LIST_INIT_SIZE*sizeof(Elemtype));if(!L.elem){return false;}L.length=0;L.listsize=LIST_INIT_SIZE;return true;}//创建顺序表(判断是否需要重新分配内存,将元素读⼊)Status CreateList(SqList &L,int size){if(size>L.listsize){Elemtype *newbase;newbase=(Elemtype *)realloc(L.elem ,(L.listsize+INCREAMENT)*sizeof(Elemtype));if(!newbase){return false;}L.elem=newbase;L.listsize+=INCREAMENT;}printf("输⼊创建顺序表内容:\n");for(int i=0;i<size;i++){scanf("%c",L.elem+i);getchar();//输⼊了6个元素,只输⼊三次就⾃动结束,因为vc6.0将回车也算进字符⾥,这⾥⽤getchar()接收 }L.length=size;return true;}//顺序表的遍历,⽤指针来操作Status TraverseList(SqList L){if(L.length==0){printf("空表!");return false;}printf("遍历结果:\n");for(int i=0;i<L.length;i++){printf("%c",*(L.elem++));printf("\n");}return true;}//顺序表中第i个元素之前插⼊元素,下标是i-1Status ListInsert(SqList &L,int i,Elemtype e){//⾮法判断if(i<0||i>L.length){return false;}if(L.length>=L.listsize){Elemtype *newbase;//这⾥为了更好的判断出空间分配结果,新建⼀个变量newbasenewbase=(Elemtype *)realloc(L.elem,(L.listsize+INCREAMENT)*sizeof(Elemtype));if(!newbase){return false;}L.listsize+=INCREAMENT;}Elemtype *itemp,*ttemp;itemp=&(L.elem[i-1]);ttemp=&(L.elem[L.length-1]);for(ttemp;ttemp>=itemp;ttemp--){*(ttemp+1)=*ttemp;}*itemp=e; //这⾥的itemp始终指向第i个元素的位置,所以⽤他赋值较好L.length+=1;return true;}//删除顺序表中第i个元素Status ListDelete(SqList &L,int i,Elemtype &e){if(i<0||i>L.length){return false;}Elemtype *itemp=&(L.elem[i-1]);e=*itemp;Elemtype *ttemp=&(L.elem[L.length-1]);for(itemp;itemp<ttemp;itemp++){*itemp=*(itemp+1);}L.length--;return true;}//返回顺序表中第⼀个与e满⾜compare()关系的元素位序,不存在返回0int LocateElem(SqList L,Elemtype e,Status (*compare)(Elemtype e,Elemtype temp)){int i=1;Elemtype *temp=L.elem;while(!(*compare)(e,*temp)&&i<=L.length){temp++;i++;}if(i>L.length){i=0;}return i;}//清空顺序表,只让length=0Status ClearList(SqList &L){L.length=0;return true;}//销毁顺序表,释放elem指针Status DestroyList(SqList &L){if(L.elem){free(L.elem);}L.length=0;return true;}//两个元素是否相等Status EqualElem(Elemtype e,Elemtype temp){if(e==temp){return true;}return false;}//将两个值不递减的顺序表合并到⼀个新的顺序表中void MergeList(SqList La,SqList Lb,SqList &Lc){Lc.listsize=La.length+Lb.length;Lc.length=Lc.listsize;Lc.elem=(Elemtype *)malloc(Lc.listsize*sizeof(Elemtype)); Elemtype *pa,*pb,*pa_last,*pb_last,*pc;pa=&La.elem[0];pb=&Lb.elem[0];pa_last=&(La.elem[La.length-1]);pb_last=&(Lb.elem[Lb.length-1]);pc=&Lc.elem[0];while(pa<=pa_last&&pb<=pb_last){if(*pa<*pb){*pc++=*pa++;}else{*pc++=*pb++;}}while(pa<=pa_last){*pc++=*pa++;}while(pb<=pb_last){*pc++=*pb++;}}。

数据结构顺序表代码

数据结构顺序表代码

数据结构顺序表代码顺序表是一种线性数据结构,它的元素在内存中是连续存储的。

顺序表的实现方式是通过数组来存储元素,因此它具有随机访问的特点,可以快速地访问任意位置的元素。

在本文中,我们将介绍顺序表的实现方式,并给出相应的代码示例。

顺序表的实现方式顺序表的实现方式是通过数组来存储元素。

在创建顺序表时,需要指定顺序表的容量,即可以存储的元素个数。

在顺序表中,元素的下标从0开始,最大下标为容量减1。

当顺序表中的元素个数达到容量时,需要进行扩容操作。

顺序表的基本操作1. 初始化操作初始化操作是创建一个空的顺序表,即将顺序表的元素个数设置为0。

```#define MAXSIZE 100 // 定义顺序表的最大容量typedef struct {int data[MAXSIZE]; // 存储元素的数组int length; // 顺序表的元素个数} SqList;void InitList(SqList *L) {L->length = 0;}```2. 插入操作插入操作是向顺序表中插入一个元素。

插入操作需要指定插入位置和插入元素的值。

在插入元素之前,需要判断顺序表是否已满,如果已满,则需要进行扩容操作。

```void Insert(SqList *L, int pos, int value) {if (L->length == MAXSIZE) { // 判断顺序表是否已满printf("顺序表已满,无法插入元素\n");return;}if (pos < 1 || pos > L->length + 1) { // 判断插入位置是否合法printf("插入位置不合法\n");return;}for (int i = L->length; i >= pos; i--) { // 将插入位置后的元素向后移动一位L->data[i] = L->data[i - 1];}L->data[pos - 1] = value; // 插入元素L->length++; // 顺序表的元素个数加1}```3. 删除操作删除操作是从顺序表中删除一个元素。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实现顺序表的各种基本运算
一、实验目的
了解顺序表的结构特点及有关概念,掌握顺序表的各种基本操作算法思想及其实现。

二、实验内容
编写一个程序,实现顺序表的各种基本运算:
1、初始化顺序表;
2 、顺序表的插入;
3、顺序表的输出;
4 、求顺序表的长度
5 、判断顺序表是否为空;
6 、输出顺序表的第i位置的个元素;
7 、在顺序表中查找一个给定元素在表中的位置;
8、顺序表的删除;
9 、释放顺序表
三、算法思想与算法描述简图
主函数main
四、实验步骤与算法实现
#in clude<stdio.h>
#in clude<malloc.h> #defi ne MaxSize 50 typedef char ElemType; typedef struct
{ElemType data[MaxSize]; in t le ngth;
void In itList(SqList*&L)〃
初始化顺序表 L
{L=(SqList*)malloc(sizeof(SqList)); L->le ngth=0;
for(i=0;i<L->le ngth;i++) prin tf("%c ",L->data[i]);
}
void
DestroyList(SqList*&L)〃 {free(L); }
int ListEmpty(SqList*L)〃 {retur n( L->le ngth==O); }
int Listle ngth(SqList*L)〃 {return(L->le ngth); }
void DispList(SqList*L)〃 {int i;
释放顺序表
L
prin tf("\n");
}
int GetElem(SqList*L,int i,ElemType e)/* 获取顺序表L 中的第i 个元素*/
return 0;
e=L->data[i-1];
return 1;
}
int LocateEmpty(SqList*L,ElemType e)/* {int
i=0;
while (i<L->le ngth&&L->data[i]!=e)
i++;
if(i>=L->le ngth)
return 0;
else
return i+1;
}
int ListInsert(SqList*&L,int i,ElemType e)/* 在顺序表中第i 个位置上插入元素e*/ {int j;
if(i<1||i>L->le ngth+1)
return 0;
L->data[j]=L->data[j-1];
L->data[i]=e;
return 1;
} Array
int ListDelete(SqList*&L,int i,ElemType e)/* {int j;
if(i<1||i>L->le ngth)
return 0;
i--;〃将顺序表位序转化为data下标
e=L_>data[i];
for(j=i;j<L->le ngth-1;j++)
L->data[j]=L->data[j+1];
L->le ngth--;
return 1;
}
void mai n()
{SqList*L;
ElemType e;
prin tf("(1) 初始化顺序表L\n");
In itList(L);// 初始化
prin tf("(2) 依次采用尾插法插入7,9,12,13,14,15,18\n"); ListI nsert(L,1,'7');
ListI nsert(L,2,'9');
ListI nsert(L,3,'12');
ListI nsert(L,4,'13');
ListI nsert(L,5,'14');
ListI nsert(L,6,'15');
ListI nsert(L,7,'18');
printf("(3) 输出顺序表L:");
DispList(L);
printf("(4) 顺序表L 长度=%d\n”,Listlength(L));
printf("(5) 顺序表L 为%s\n",(Listlength(L)?" 空":"非空")); GetElem(L,3,12);
printf("(6) 顺序表第3 个元素=%d\n",12);
printf("(7) 元素a 的位置=%d\n",LocateEmpty(L,'a'));
printf("(8) 在第4个数位置上插入8元素\n");
Listl nsert(L,4,8);
printf("(9) 输出顺序表L:");
DispList(L);
printf("(10) 删除L的第3个元素\n”);
ListDelete(L,3,e);
printf("(11) 输出顺序表L:");
DispList(L);
printf("(12) 释放顺序表L\n");
DestroyList(L);
}
五、实验测试及结果
六、思考题
按由表头至表尾和表尾至表头的次序输入数据元素,则顺序表建
立的程序设计有何区别?
解答:若是按表头至表尾次序输入,则存放的元素与顺序表中位置一一对应,而表尾至表头输入则相反。

输出时,也相反!。

相关文档
最新文档