线性表之顺序表框架实现与测试

#ifndef DYNAMIC_ARR_H
#define DYNAMIC_ARR_H
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//实现动态增长,所以我们把它放在堆上

typedef struct DYNAMIN_ARRay {
int* addres;//存放数据的地址
int size;//当前有多少个元素
int capacity;//当前最大能容纳多少个元素
}Dynamic_ARRay;

//1.初始化,即创建
Dynamic_ARRay* Dynamic_ARRay_init();
//2.插入某个元素,往哪里插入,插入什么元素,所以形式参数如下
void Push_Back_Array(Dynamic_ARRay*arr, int value);
//3.删除某个元素,根据元素的位置
void Remove_Back_Array(Dynamic_ARRay*arr, int pos);
//4;删除某个元素,根据元素的值
void Removevalue_Array(Dynamic_ARRay*arr, int value);
//5.释放该顺序表的内存
void FreeArray_Array(Dynamic_ARRay*arr);
//6.打印出该顺序表的值
void Print_Array(Dynamic_ARRay* arr);
//7.查找出某个元素。根据值
int Find_Array(Dynamic_ARRay* arr, int value);
//8.清空顺序表
void Clear_Array(Dynamic_ARRay* arr);
//9.获取当前容量
int capacity_Array(Dynamic_ARRay* arr);
//10.根据某个位置获得某个元素
int Pos_Array(Dynamic_ARRay* arr, int pos);
//11。获取当前有多少个元素
int size_Array(Dynamic_ARRay*);
#endif

.c文件

//线性表分为2类,顺序表与链表,以下为顺序表的代码实现。
#define _CRT_SECURE_NO_WARNINGS
#include"DYNAMIC_ARR.h"
// 1.初始化,即创建
 Dynamic_ARRay* Dynamic_ARRay_init(){
  //开辟一片内存
  Dynamic_ARRay* myarray = (Dynamic_ARRay*)malloc(sizeof(Dynamic_ARRay));
  myarray->size = 0;
  myarray->capacity = 20;;
  myarray->addres = (int *)malloc(sizeof(int) * myarray->capacity);
  return  myarray;
 }
 /2.插入某个元素,尾部插入,插入什么元素,所以形式参数如下
 void Push_Back_Array(Dynamic_ARRay * arr, int value)
 {
  if (arr == NULL) {
   printf("指针出现问题");
   return;
  }
  if (arr->size == arr->capacity) {
   int* newspace = (int*)malloc(sizeof(int) * arr->capacity * 2);
   memcpy(newspace, arr->addres, sizeof(int) * arr->capacity);
   free(arr->addres);
   arr->capacity = arr->capacity * 2;
   arr->addres = newspace;
  }
  arr->addres[arr->size] = value;
  arr->size++;
 }
 //3.删除某个元素,根据元素的位置
 void Remove_Back_Array(Dynamic_ARRay * arr, int pos) {
  if (arr == NULL) {
   return ;
  }
  if (pos<0 || pos>=arr->size) {
   printf("该位置不合法,无法删除该位置的元素");
   return;
  }
   //覆盖该位置的元素就是删除了,其他位置的元素加加
   for (int i = pos;i < arr->size;i++)
   {
    arr->addres[i] = arr->addres[i + 1];
   }
   arr->size--;
 }
 //4;删除某个元素,根据元素的值
 void Removevalue_Array(Dynamic_ARRay* arr, int value) {
  if (arr == NULL) {
   return;
  }
  int pos = 0;//表示在那个位置发现了相同,打算调用上面的pos函数。
  for (int i = 0;i < arr->size;i++) {
   if (arr->addres[i] == value) {
    pos = i;
    break;
   }
  }
  Remove_Back_Array(arr, pos);
  arr->size--;
 }
 //5.释放该顺序表的内存
 void FreeArray_Array(Dynamic_ARRay * arr) {
  if (arr == NULL) {
   return ;
  }
  if (arr->addres != NULL) {
   free(arr->addres);
  }
  free(arr);
 }
 //6.打印出该顺序表的值
 void Print_Array(Dynamic_ARRay * arr) {
  for (int i = 0;i < arr->size;i++) {
   printf("%d  ", arr->addres[i]);
  }
  printf("\n");
 }
 nt Find_Array(Dynamic_ARRay* arr, int value) {
  if (arr == NULL) {
   return -1;
  }
  for (int i = 0;i < arr->size;i++) {
   if (value = arr->addres[i])
    return value;
   else
    printf("该顺序表不存在该元素,查询不到");
  }
 }
 //8.清空顺序表
 void Clear_Array(Dynamic_ARRay* arr) {
  
  if (arr == NULL) {
   return;
  }
  arr->size =0 ;
 }
 int capacity_Array(Dynamic_ARRay* arr)
 {
  if (arr == NULL){
   return -1;
  }
  return arr->capacity;
 }
 //10.根据某个位置获得某个元素
 int Pos_Array(Dynamic_ARRay* arr, int pos) {
  if (arr == NULL) {
   return -1;
  }
  return arr->addres[pos];
 }
 //11.获取当前元素的个数
 int size_Array(Dynamic_ARRay*arr){
  if (arr == NULL) {
   return -1;
  }
  return arr->size;
 }

.c测试文件

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"DYNAMIC_ARR.h"
void tese() {
 Dynamic_ARRay * Myarray= Dynamic_ARRay_init();
 printf("%d数组大小", capacity_Array(Myarray));
 for (int i = 0;i < 30;i++) {
  Push_Back_Array(Myarray, i);
 }
 printf("%d数组大小", capacity_Array(Myarray));
 Print_Array(Myarray);
 //Removevalue_Array(Myarray, 20);
 Remove_Back_Array(Myarray,1);
 Removevalue_Array(Myarray, 20);
 Print_Array(Myarray);
 FreeArray_Array(Myarray);
}
int main(void) {
 tese();
 system("pause");
 return 0;
}
发布了3 篇原创文章 · 获赞 3 · 访问量 69

猜你喜欢

转载自blog.csdn.net/m0_46300070/article/details/105518984
今日推荐