在学数据结构,记录一下每天学了些什么。
#include<stdio.h>
#include<stdlib.h>
#define InitSize 10
//用动态分配实现顺序表
typedef struct{
int *date;
int length;
int MaxSize;
}SqList;
//初始化顺序表-动态分配一块内存
void InitList(SqList &L){
L.date=(int*)malloc(InitSize*sizeof(int));
L.length=0;
L.MaxSize=InitSize;
}
//当发现内存不够用时,用这个函数增加动态数组的长度
void IncreaseSize(SqList &L,int len){
int *p=L.date;
L.date=(int*)malloc((L.MaxSize+len)*sizeof(int));
for(int i=0;i<L.length;i++){
L.date[i]=p[i];
}
L.MaxSize=L.MaxSize+len;
free(p);
}
//插入元素
bool ListInsert(SqList &L,int i,int e){
if(i<1||i>L.length+1)
return false;
if(L.length>=L.MaxSize) //数据表存满了,不能再插入
return false;
for (int j=L.length;j>=i;j--){
L.date[j]=L.date[j-1];
}
L.date[i-1]=e;
L.length++;
return true;
}
//删除元素
bool ListDelete(SqList &L,int i,int &e){
if(i<1||i>L.length)
return false;
e=L.date[i-1];
for (int j=0;j<=L.length;j++){
L.date[j-1]=L.date[j];
}
L.length--;
return true;
}
//遍历输出数据表
void PrintList(SqList L){
for (int i=0;i<L.MaxSize;i++){
printf("%d,",L.date[i]);
}
}
int main(){
SqList L;
InitList(L);
IncreaseSize(L,5);
int a[]={1,2,3,4,5,6,7,8,9};
L.length=sizeof(a)/sizeof(int);
for (int n=0;n<sizeof(a)/sizeof(int);n++){
L.date[n]=a[n];
}
// printf("插入前");
// PrintList(L);
// printf("\n");
//
// ListInsert(L,4,99);
int e=-1;
if(ListDelete(L,5,e)){
printf("已删除第%d个元素,删除元素值为:%d\n",5,e);
}else{
printf("位序i不合法,删除失败\n");
}
// printf("插入后");
// PrintList(L);
// printf("\n");
return 0;
}