#include<stdio.h>
#include<stdlib.h>
#define InitSize 5
//动态存储的顺序表的一些基本操作
//结构体的定义
typedef struct DpSeqList{
int *data;
int MaxSize,length;//表示动态存储顺序表的最大容量和当前容量
}seqlist;
//初始化
void InitList(seqlist &l){
l.data = (int *)malloc(InitSize*sizeof(int));
l.MaxSize = InitSize;
l.length = 0;
}
//返回表长
int Length(seqlist l){
return l.length;
}
//按位查找
int GetElem(seqlist l,int index){
return l.data[index];
}
//要明白为什么动态存储的堆空间也可以随机访问,类似于指针的偏移,每次的+1都是往后sizeof(数据类型)*1个字节
//按值查找
int LocatedElem(seqlist l,int num){
for (int i = 0; i < Length(l); ++i) {
if(l.data[i]==num)return i+1;//返回位序
}
}
//增加容量
void Increase(seqlist &l){
if(l.length==l.MaxSize){
int *p = l.data;
l.data = (int *) malloc(sizeof(int)*l.MaxSize*2);
l.MaxSize*=2;
for (int i = 0; i < l.length; ++i) {
l.data[i]=p[i];
}
free(p);
}
}
//尾插法
void TailInsert(seqlist &l,int num){
Increase(l);
l.data[l.length]=num;
l.length++;
}
//头插法(也可以使用和静态存储相同的方法)
void HeadInsert(seqlist &l,int num){
Increase(l);
int *p = l.data;
l.data = (int *)malloc(sizeof(int)*l.MaxSize);
l.data[0] = num;
for(int i = 1;i<=l.length;i++){
l.data[i] = p[i-1];
}
l.length++;
free(p);
}
//尾删除
void TailDeleteList(seqlist &l){
if(l.length<1)printf("List is NULL");
l.length--;
}
//删除
void DeleteList(seqlist &l,int index){
if(index>=l.length||index<0)printf("Do not delete!");
for(int i = index-1;i<l.length;i++){
l.data[i]=l.data[i+1];
}
l.length--;
}
void PrintLIst(seqlist &l){
for (int i = 0; i < l.length; ++i) {
printf("%d ",l.data[i]);
}
printf("\n");
}
//销毁
void DestoryList(seqlist &l){
l.length=0;
free(l.data);
}
int main(){
seqlist l,ll;
int n;
printf("Input your choose:");
scanf("%d",&n);
InitList(l);
InitList(ll);
printf("Input num:");
for(int i = 0;i<n;i++){
int temnum;
scanf("%d",&temnum);
TailInsert(l,temnum);
}
PrintLIst(l);
DeleteList(l,1);
PrintLIst(l);
// for(int i = 0;i<InitSize;i++){
// int temnum;
// scanf("%d",&temnum);
// HeadInsert(ll,temnum);
// }
// PrintLIst(ll);
return 0;
}
动态存储的顺序表基本操作方法代码实现(自留用)
最新推荐文章于 2024-05-13 08:55:29 发布