学习笔记,仅供参考
1.头文件
2.初始化
3.增加值
4.根据下标取值
5.查找
6.插入
7.删除
8.动态增加数组的长度
9.所有代码
10.运行结果
1.头文件
//顺序表的实现——动态分配
#include<stdio.h>
#include<stdlib.h>
#define InitSize 10
typedef struct{
int *data;
int MaxSize;
int length;
}SeqList;
2.初始化
//初始化一个顺序表
void InitList(SeqList &L){
//使用malloc函数申请一片连续的存储空间
L.data = (int*)malloc(InitSize*sizeof(int));
L.length = 0;
L.MaxSize = InitSize;
}
3.增加值
//增加值
void AddValue(SeqList &L,int num){
for (int i = 0;i<num;i++){
scanf("%d",&L.data[i]);
L.length++;
}
}
4.根据下标取值
判断所给的下标是否越界。
//根据下标取值
bool GetElem(SeqList &L,int num,int &e){
if (num<1 || num>L.length) return false;
e = L.data[num-1];
return true;
}
5.查找
//查找
int LocateElem(SeqList &L,int y){
for (int i = 0;i<L.length;i++){
if(L.data[i] == y) return i+1;
}
return 0;
}
6.插入
判断是否越界,同时L.length为前置++。
//插入
bool ListInsert(SeqList &L,int k,int kl){
if (kl<1 || kl>L.length+1) return false;
if (L.length == L.MaxSize) return false;
for(int i = L.length-1;i>=kl-1;i--){
L.data[i+1] = L.data[i];
}
L.data[kl-1] = k;
++L.length;
return true;
}
7.删除
//删除
bool ListDelet(SeqList &L,int num){
if (num<1 || num>L.length) return false;
for(int i = num;i<L.length;i++){
L.data[i-1] = L.data[i];
}
--L.length;
return true;
}
8.动态增加数组的长度
//动态增加数组的长度
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.length;i++){
L.data[i] = p[i];
}
L.MaxSize = L.MaxSize+len;
free(p);
}
9.所有代码
//顺序表的实现——动态分配
#include<stdio.h>
#include<stdlib.h>
#define InitSize 10
typedef struct{
int *data;
int MaxSize;
int length;
}SeqList;
//初始化一个顺序表
void InitList(SeqList &L){
//使用malloc函数申请一片连续的存储空间
L.data = (int*)malloc(InitSize*sizeof(int));
L.length = 0;
L.MaxSize = InitSize;
}
//增加值
void AddValue(SeqList &L,int num){
for (int i = 0;i<num;i++){
scanf("%d",&L.data[i]);
L.length++;
}
}
//根据下标取值
bool GetElem(SeqList &L,int num,int &e){
if (num<1 || num>L.length) return false;
e = L.data[num-1];
return true;
}
//查找
int LocateElem(SeqList &L,int y){
for (int i = 0;i<L.length;i++){
if(L.data[i] == y) return i+1;
}
return 0;
}
//插入
bool ListInsert(SeqList &L,int k,int kl){
if (kl<1 || kl>L.length+1) return false;
if (L.length == L.MaxSize) return false;
for(int i = L.length-1;i>=kl-1;i--){
L.data[i+1] = L.data[i];
}
L.data[kl-1] = k;
++L.length;
return true;
}
//删除
bool ListDelet(SeqList &L,int num){
if (num<1 || num>L.length) return false;
for(int i = num;i<L.length;i++){
L.data[i-1] = L.data[i];
}
--L.length;
return true;
}
//动态增加数组的长度
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.length;i++){
L.data[i] = p[i];
}
L.MaxSize = L.MaxSize+len;
free(p);
}
int main(){
SeqList L;
int n,x;
printf("请输入你要增加几条数据:");
InitList(L);
scanf("%d",&n);
//增加值
AddValue(L,n);
printf("当前的数据为:") ;
for(int i = 0;i<L.length;i++){
printf("%d ",L.data[i]);
}
printf("\n");
printf("当前顺序表的长度为:%d\n",L.length);
//根据下标找值
int e;
printf("请输入你要取第几个值:");
scanf("%d",&x);
if (GetElem(L,x,e)) printf("找到的第%d个值为%d\n",x,e);
else printf("没有找到\n");
//查找
int y;
printf("请输入你要查找的值:");
scanf("%d",&y);
if (LocateElem(L,y)) printf("%d在第%d位置上\n",y,LocateElem(L,y));
else printf("没有找到\n");
//插入
int k,kl;
printf("请输入你要插入的值以及插入的位置:");
scanf("%d %d",&k,&kl);
if(ListInsert(L,k,kl)) printf("现在第%d位置上的值变为了%d\n",kl,k);
else printf("插入失败\n");
printf("当前的数据为:") ;
for(int i = 0;i<L.length;i++){
printf("%d ",L.data[i]);
}
printf("\n");
printf("当前顺序表的长度为:%d\n",L.length);
//删除
int sc;
printf("请输入你要删除第几个数据:");
scanf("%d",&sc);
if(ListDelet(L,sc)) printf("删除成功\n");
else printf("删除失败\n");
printf("当前的数据为:") ;
for(int i = 0;i<L.length;i++){
printf("%d ",L.data[i]);
}
printf("\n");
printf("当前顺序表的长度为:%d\n",L.length);
//增加顺序表长度
int l;
printf("请输入你要增加的长度:");
scanf("%d",&l);
IncreaseSize(L,l);
printf("当前顺序表的最大长度为:%d\n",L.MaxSize);
return 0;
}