[数据结构]顺序表的定义、拓展、插入、删除

在学数据结构,记录一下每天学了些什么。

 #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;
 }

猜你喜欢

转载自blog.csdn.net/2301_76253447/article/details/133281964
今日推荐