顺序表的各种基本运算
2017-11-22 15:42
211 查看
顺序表的各种基本运算
码文不易,如果帮助到您,希望您可以帮我刷一下点击量,与您无害,与我有益谢谢 支持原创 。欢迎大家阅读我的博客,如果有错误请指正,有问题请提问,我会尽我全力改正错误回答问题。在此谢谢大家。下面开始正式内容
順序表是在計算機內存中以數組的形式保存的線性表,是指用一組地址連續的存儲單元依次存儲數據元素的線性結構。维基百科-顺序表
实验环境
语言c/c++编译器devc++5.11
实验内容与要求
初始化顺序表;依次插入a,b,c,d,e元素;
输出顺序表L;
输出顺序表L的长度;
判断顺序表L是否为空;
输出顺序表L指定位置元素;
输出顺序表L指定元素的位置;
插入元素;
输出顺序表L;
删除L元素;
释放顺序表。
目录
顺序表的各种基本运算实验环境
实验内容与要求
目录
实验解析
结构说明
定义说明
函数说明
顺序表函数
初始化顺序表
判空
获取长度
打印
插入
删除
查询
释放
主函数
结果展示
附录
相关资料
源代码
码文不易,如果帮助到您,希望您可以帮我刷一下点击量,与您无害,与我有益谢谢 支持原创 。
实验解析
结构说明
由于C语言的数组类型也有随机存取的特点,一维数组的机内表示就是顺序结构。因此,可用C语言的一维数组实现线性表的顺序存储。在此,我们利用C语言的结构体类型定义顺序表:
#define LIST_INIT_SIZE 100 // 线性表初始存储空间分配量 #define LISTINCREMENT 10 //线性表存储空间的分配增量 typedef struct{ ElemType * elem; //线性表存储空间基址 int length; //当前线性表长度 int listsize; //当前分配的线性表存储空间大小 //(以sizeof(ElemType)为单位) }SqList;
定义说明
#define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 typedef int Status; typedef char ElemType;
定义常用常量,类型别称
函数说明
顺序表函数
初始化顺序表
Status InitList_Sq(SqList &L){ L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType)); //构造一个空的顺序表L if (! L.elem) exit(0); //存储分配失败 L. length=0; //空表长度为0 L.Listsize=LIST_INIT_SIZE; //初始存储容量 return OK; }//InitList_Sq
给传入顺序表分配空间 ,成功返回1,失败则结束程序。 使用顺表一定要先初始化再使用顺序表
判空
Status EmptyList_Sq ( SqList L) { if(L.length==0) return TRUE; else return FALSE; }
判断传入顺序表L是否为空,空返回1,不空为0
获取长度
Status LengthList_Sq ( SqList L) { return L.length; }
返回传入顺序表长度
打印
Status DisplayList_Sq ( SqList L){ //打印表中元素 int i ; for(i=0;i<L.length;i++) printf("%c"< 4000 /span> , L.elem[i]); printf("\n"); return OK; }
打印传入顺序表中的值到屏幕
码文不易,如果帮助到您,希望您可以帮我刷一下点击量,与您无害,与我有益谢谢 支持原创 。
插入
Status ListInsert_Sq(SqList &L, int i , ElemType e) { //在顺序表L中第i个位置之后插入新的元素e, // i的合法值为1≤i≤L.length+1,当i =L.length+1时 // e插在表尾 if (i<1|| i>L.length+1) return ERROR; // i值不合法 if (L.length>=L.Listsize) return ERROR; //顺序表已满 for (int j=L.length-1 ; j>= i-1; --j) L.elem[j+1] =L.elem[j]; //插入位置及之后的元素后移一个位置 L.elem[i-1] =e; //插入e L.length++; //表长增1*/ return OK; }//ListInsert_Sq
将元素e插入顺序表L的第i位,成功返回1,失败返回0
删除
Status ListDelete_Sq(SqList &L, int i, ElemType &e) { //在顺序表L中删除第 i个元素,并用e返回其值 // i的合法值为 1≤i≤L.length if ((i<1)||(i>L.length)) return ERROR; // i值不合法或表空 e = L.elem[i-1] ; // 被删除元素的值赋给e for (int j= i; j<= L.length-1; ++j) L.elem[j-1]= L.elem[j]; //被删除元素之后的元素前移 L.length--; //表长减1 return OK; }//ListDelete_Sq
删除顺序表L第i个元素并保存该元素到变量e,成功返回1,失败返回0
查询
Status GetElemList_Sq ( SqList L,int i,ElemType &e) { if(i<1||i>L.length) return ERROR; e=L.elem[i-1]; return OK; }
获取顺序表L的第i个元素,存到变量e中,成功返回1,失败返回0
Status LocateElemList_Sq( SqList L,ElemType e) { int i=0; while(i<L.length&&L.elem[i]!=e) i++; if(i>=L.length) return 0; return i+1; }
获取顺序表L中e元素第一次出现的位置,成功返回元素位置,失败返回0
释放
Status DestroyList_Sq ( SqList &L) { if (!L.elem) return ERROR; free (L.elem); L.elem = NULL; L.length = 0; L.Listsize = 0; return OK; }// DestroyList_Sq
释放传入的顺序表,成功返回1,失败返回0
主函数
int main(){ SqList L; ElemType e; printf("(1)初始化顺序表\n"); InitList_Sq(L); printf("(2)依次插入a,b,c,d,e元素\n"); ListInsert_Sq(L,1,'a'); ListInsert_Sq(L,2,'b'); ListInsert_Sq(L,3,'c'); ListInsert_Sq(L,4,'d'); ListInsert_Sq(L,5,'e'); ListInsert_Sq(L,3,'q'); ListInsert_Sq(L,1,'q'); printf("(3)输出顺序表:"); DisplayList_Sq(L); printf("(4)顺序表的长度=%d\n",LengthList_Sq(L)); printf("(5)顺序表为%s\n",(EmptyList_Sq(L)?"空":"非空")); GetElemList_Sq(L,3,e); printf("(6)顺序表的第三个元素是%c\n",e); printf("(7)元素a的位置=%d\n",LocateElemList_Sq(L,'a')); printf("(8)在第四个元素插入元素f\n"); ListInsert_Sq(L,4,'f'); printf("(9)输出顺序表:"); DisplayList_Sq(L); printf("(10)删除第三个元素\n"); ListDelete_Sq(L,3,e); printf("(11)f元素第一次出现的位置:"); printf("%d\n",LocateElemList_Sq(L,'f')); printf("(12)输出顺序表:"); DisplayList_Sq(L); printf("(13)释放顺序表\n"); DestroyList_Sq(L); }
结果展示
附录
相关资料
维基百科-顺序表源代码
码文不易,如果帮助到您,希望您可以帮我刷一下点击量,与您无害,与我有益谢谢 支持原创 。#include<stdio.h> //EOF,NULL
#include<malloc.h> //malloc()
#include<process.h> //exit()
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int Status;
typedef char ElemType;
#define LIST_INIT_SIZE 100 // 线性表初始存储空间分配量
#define LISTINCREMENT 10 //线性表存储空间的分配增量
typedef struct{
ElemType * elem; //线性表存储空间基址
int length; //当前线性表长度
int Listsize; //当前分配的线性表存储空间大小
//(以sizeof(ElemType)为单位)
}SqList;
Status InitList_Sq(SqList &L){
L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType)); //构造一个空的顺序表L
if (! L.elem) exit(0); //存储分配失败
L. length=0; //空表长度为0
L.Listsize=LIST_INIT_SIZE; //初始存储容量
return OK;
}//InitList_Sq
Status DestroyList_Sq ( SqList &L) {
if (!L.elem) return ERROR;
free (L.elem);
L.elem = NULL;
L.length = 0;
L.Listsize = 0;
return OK;
}// DestroyList_Sq
Status EmptyList_Sq ( SqList L) { if(L.length==0) return TRUE; else return FALSE; }
Status LengthList_Sq ( SqList L) { return L.length; }
Status DisplayList_Sq ( SqList L){ //打印表中元素
int i ;
for(i=0;i<L.length;i++)
printf("%c" , L.elem[i]);
printf("\n");
return OK;
}
Status ListInsert_Sq(SqList &L, int i , ElemType e) { //在顺序表L中第i个位置之后插入新的元素e, // i的合法值为1≤i≤L.length+1,当i =L.length+1时 // e插在表尾 if (i<1|| i>L.length+1) return ERROR; // i值不合法 if (L.length>=L.Listsize) return ERROR; //顺序表已满 for (int j=L.length-1 ; j>= i-1; --j) L.elem[j+1] =L.elem[j]; //插入位置及之后的元素后移一个位置 L.elem[i-1] =e; //插入e L.length++; //表长增1*/ return OK; }//ListInsert_Sq
Status ListDelete_Sq(SqList &L, int i, ElemType &e) { //在顺序表L中删除第 i个元素,并用e返回其值 // i的合法值为 1≤i≤L.length if ((i<1)||(i>L.length)) return ERROR; // i值不合法或表空 e = L.elem[i-1] ; // 被删除元素的值赋给e for (int j= i; j<= L.length-1; ++j) L.elem[j-1]= L.elem[j]; //被删除元素之后的元素前移 L.length--; //表长减1 return OK; }//ListDelete_Sq
Status GetElemList_Sq ( SqList L,int i,ElemType &e) { if(i<1||i>L.length) return ERROR; e=L.elem[i-1]; return OK; }
Status LocateElemList_Sq( SqList L,ElemType e) { int i=0; while(i<L.length&&L.elem[i]!=e) i++; if(i>=L.length) return 0; return i+1; }
int main(){
SqList L;
ElemType e;
printf("(1)初始化顺序表\n");
InitList_Sq(L);
printf("(2)依次插入a,b,c,d,e元素\n");
ListInsert_Sq(L,1,'a');
ListInsert_Sq(L,2,'b');
ListInsert_Sq(L,3,'c');
ListInsert_Sq(L,4,'d');
ListInsert_Sq(L,5,'e');
ListInsert_Sq(L,3,'q');
ListInsert_Sq(L,1,'q');
printf("(3)输出顺序表:");
DisplayList_Sq(L);
printf("(4)顺序表的长度=%d\n",LengthList_Sq(L));
printf("(5)顺序表为%s\n",(EmptyList_Sq(L)?"空":"非空"));
GetElemList_Sq(L,3,e);
printf("(6)顺序表的第三个元素是%c\n",e);
printf("(7)元素a的位置=%d\n",LocateElemList_Sq(L,'a'));
printf("(8)在第四个元素插入元素f\n");
ListInsert_Sq(L,4,'f');
printf("(9)输出顺序表:");
DisplayList_Sq(L);
printf("(10)删除第三个元素\n");
ListDelete_Sq(L,3,e);
printf("(11)f元素第一次出现的位置:");
printf("%d\n",LocateElemList_Sq(L,'f'));
printf("(12)输出顺序表:");
DisplayList_Sq(L);
printf("(13)释放顺序表\n");
DestroyList_Sq(L);
}
码文不易,如果帮助到您,希望您可以帮我刷一下点击量,与您无害,与我有益谢谢 支持原创 。
相关文章推荐
- 实现顺序栈各种基本运算
- 编写一个程序,实现顺序环形队列的各种基本运算。
- 顺序栈的各种基本运算
- 顺序循环队列的各种基本运算
- 顺序表的各种基本运算
- 实现顺序表各种基本运算的算法
- 编写一个程序,实现顺序表的各种基本运算
- 顺序串各种基本运算的算法
- 编写一个程序实现顺序表的各种基本运算(假设顺序表的元数基本类型为Char)
- 顺序栈各种基本运算的算法
- 编写一个程序,实现顺序栈的各种基本运算。
- 3.1实现顺序栈的各种基本运算
- 实现顺序表各种基本运算算法
- 编写一个程序实现顺序栈的各种基本运算(假设顺序表的元数基本类型为Char)
- 实现顺序栈各种基本运算的算法
- 数据结构 顺序串的各种基本运算
- 实现顺序队列各种基本运算的算法
- 实现顺序表的各种基本运算(利用线性表来实现)
- 实现顺序栈的各种基本运算的算法
- 顺序环形队列的各种基本运算