动态顺序表的创建
#include<stdio.h>
#include<stdlib.h>
#define InitSize 10
typedef struct {
int *data;
int MaxSize; //最大容量
int length; //当前长度
}SeqList;
// 初始化顺序表
void InitList(SeqList &L)
{
//用malloc申请一片连续的存储空间
//int的大小乘以个数等于malloc申请的总空间大小,返回的指针强转化为int型,再赋给data指针
L.data = (int *)malloc(sizeof(int)*InitSize);
//因为这是初始化列表,并没有数据,所以要使有用数据长度为0
L.length = 0;
L.MaxSize = InitSize;
// 根据最大长度进行填充
for (int i = 0; i < L.MaxSize; i++)
{
L.data[i] = i;
//添加数据后要使用自增一,确定当前顺序表的数据长度
L.length++;
}
}
// 增加动态数组的长度
void IncreaseSize(SeqList &L,int len){
int *p = L.data;
// 申请一片新的内存地址
L.data = (int *)malloc((L.MaxSize+len)*(sizeof(int)));
// 将数据复制到新区域
for(int i=0;i<L.MaxSize;i++){
L.data[i] = p[i];
}
// 顺序表的最大容量增加len
printf("原来的顺序表的最大容量:%d\n",L.MaxSize);
L.MaxSize=L.MaxSize+len;
printf("增加后顺序表的最大容量:%d\n",L.MaxSize);
// 释放原来的内存空间
free(p);
}
void printData(SeqList &L)
{
for (int i = 0; i < L.length; i++)
{
printf("%d\n", L.data[i]);
}
}
int main(){
SeqList L; //声明一个顺序表
InitList(L);
IncreaseSize(L,5);
printData(L);
return 0;
}
运行结果如下:
静态顺序表的创建
#include <stdio.h>
#define MaxSize 10
typedef struct{
int data[MaxSize]; // ElemType是一个抽象的数据类型,可以是int float等数据类型中的任意一种
int length;
}SqList;
int main(){
SqList L;
return 0;
}
静态顺序表的插入
#include <stdio.h>
#define MaxSize 10
typedef struct{
int data[MaxSize]; // ElemType是一个抽象的数据类型,可以是int str float中的任意一种
int length;
}SqList;
// 给静态表的数据赋值
void InitList(SqList &L)
{
L.length = 5;
for (int i = 0; i < L.length; i++)
{
L.data[i] = i;
}
}
// 定义输出函数
void printList(SqList &L)
{
for (int i = 0; i < L.length; i++)
{
printf("%d\n",L.data[i]);
}
}
bool ListInsert(SqList &L,int i,int e){
// 可以在L.length位置上
if(i<1||i>L.length+1){
printf("插入位置不合法\n");
return false;
};
// 内存空间已满,不能插入
if(L.length>=MaxSize){
printf("内存空间已满,不能插入\n");
return false;
};
for(int j=L.length;j>=i;j--){
L.data[j] = L.data[j-1];
}
L.data[i-1] = e;
L.length++;
return true;
}
int main(){
bool flag;
SqList L;
InitList(L);
printList(L);
flag = ListInsert(L,3,3);
printf("插入元素后····\n");
if (flag){
printList(L);
};
return 0;
}
静态顺序表的删除
#include <stdio.h>
#define MaxSize 10
typedef struct{
int data[MaxSize]; // ElemType是一个抽象的数据类型,可以是int str float中的任意一种
int length;
}SqList;
// 给静态表的数据赋值
void InitList(SqList &L)
{
L.length = 5;
for (int i = 0; i < L.length; i++)
{
L.data[i] = i;
}
}
// 定义输出函数
void printList(SqList &L)
{
for (int i = 0; i < L.length; i++)
{
printf("%d\n",L.data[i]);
}
}
// 核心代码 删除操作
bool ListInsert(SqList &L,int i,int e){
if(i<1||i>L.length){
printf("删除位置不合法\n");
return false;
};
for(int j=i;j<L.length;j++){
L.data[j-1] = L.data[j];
}
L.length--;
return true;
}
int main(){
bool flag;
SqList L;
InitList(L);
printList(L);
flag = ListInsert(L,3,3);
printf("删除元素后····\n");
if (flag){
printList(L);
};
return 0;
}
静态顺序表的查找
1. 按位查找
#include <stdio.h>
/*
静态顺序表 按位查找
*/
#define MaxSize 10
typedef struct{
int data[MaxSize]; // ElemType是一个抽象的数据类型,可以是int str float中的任意一种
int length;
}SqList;
// 给静态表的数据赋值
void InitList(SqList &L)
{ a
L.length = 5;
for (int i = 0; i < L.length; i++)
{
L.data[i] = i;
}
}
// 定义输出函数
void printList(SqList &L)
{
for (int i = 0; i < L.length; i++)
{
printf("%d\n",L.data[i]);
}
}
int GetElem(SqList L,int i){
// 可以在L.length位置上
if(i<1||i>L.length+1){
printf("插入位置不合法\n");
return 0;
};
// 内存空间已满,不能插入
if(L.length>=MaxSize){
printf("内存空间已满,不能插入\n");
return 0;
};
return L.data[i-1];
}
int main(){
int flag,nmap;
SqList L;
InitList(L);
printList(L);
printf("请输入要查找顺序表的位置:\n");
scanf("%d",&nmap);
flag = GetElem(L,nmap);
printf("%d位置上的值是%d\n",nmap,flag);
return 0;
}
2. 按值查找
#include <stdio.h>
/*
静态顺序表 按值查找
*/
#define MaxSize 10
typedef struct{
int data[MaxSize]; // ElemType是一个抽象的数据类型,可以是int str float中的任意一种
int length;
}SqList;
// 给静态表的数据赋值
void InitList(SqList &L)
{
L.length = 5;
for (int i = 0; i < L.length; i++)
{
L.data[i] = i;
}
}
// 定义输出函数
void printList(SqList &L)
{
for (int i = 0; i < L.length; i++)
{
printf("%d\n",L.data[i]);
}
}
int LocateElem(SqList L,int e){
for (int i=0;i<L.length;i++){
if(L.data[i]==e){
return i+1;
}
}
}
int main(){
int flag,nmap;
SqList L;
InitList(L);
printList(L);
printf("请输入要查找顺序表的值:\n");
scanf("%d",&nmap);
flag = LocateElem(L,nmap);
printf("该值%d在顺序表的第%d位置(位序)\n",nmap,flag);
return 0;
}
|