顺序表
1. 创建数组的方式建立顺序表实现增删改查
#include"stdio.h"
在中间删除或增加元素,那么效率是比较低的,因为需要移动大量的元素
int arr[100];
int len = 0;
int maxSize = 100;
void insert1(int data)
{
if (len < maxSize)
{
arr[len] = data;
len++;
}
}
void insert2(int data,int val)
{
int n = 0;
for (int i = 0; i < len; i++)
{
if (arr[i] == val)
{
len++;
for (n = len; n>i; n--)
{
arr[n - 1] = arr[n - 2];
}
arr[n] = data;
return;
}
}
}
void print()
{
for (int i = 0; i < len; i++)
{
printf("%d\t", arr[i]);
}
printf("\n");
}
void change(int data, int val)
{
for (int i = 0; i < len; i++)
{
if (arr[i] == val)
{
arr[i] = data;
printf("\n");
return;
}
}
printf("\n");
}
void find(int val)
{
for (int i = 0; i < len; i++)
{
if (arr[i] == val)
{
printf("\n该元素的下标为%d值为:%d\n", i, arr[i]);
}
}
}
void del(int val)
{
for (int i = 0; i < 10; i++)
{
if (arr[i] == val)
{
for (int n = i; n < len;n++)
{
arr[n] = arr[n + 1];
}
len--;
}
}
}
int main()
{
insert1(4);
insert1(5);
insert1(5);
insert1(6);
insert1(7);
insert1(8);
insert1(9);
print();
insert2(55, 5);
print();
return 0;
}
2.指针的方式实现顺序表的增删改查
#include"stdio.h"
#include"stdlib.h"
void initArr(int** buff,int* max)
{
*max = 10;
*buff = (int*)malloc(sizeof(int)*(*max));
memset(*buff, 0, sizeof(int)*(*max));
}
void print(int* p,int len)
{
for (int i = 0; i < len; i++)
{
printf("%d\t", p[i]);
}
printf("\n");
}
void insert(int **p,int data,int *len,int *max)
{
if (*len >= *max)
{
*max = *max + ((*max) / 2);
int* tempBuff = (int*)malloc(sizeof(int)*(*max));
for (int i = 0; i < *len; i++)
{
tempBuff[i] = (*p)[i];
}
free(*p);
*p = tempBuff;
printf("%d,%d\n", *len, *max);
}
(*p)[*len] = data;
(*len)++;
}
void del(int*p, int val, int *len)
{
for (int i = 0; i < *len; i++)
{
if (p[i] == val)
{
for (int n = i; n < *len; n++)
{
p[n] = p[n + 1];
}
(*len)--;
}
}
}
void change(int *p, int val, int data, int *len)
{
for (int i = 0; i < *len; i++)
{
if (p[i] == val)
{
p[i] = data;
}
}
}
void find(int *p, int val, int *len)
{
for (int i = 0; i < *len; i++)
{
if (p[i] == val)
{
printf("你要找的元素是%d下标为:%d\n", p[i], i);
}
}
}
int main()
{
int*buff = NULL;
int len = 0;
int maxSize = 0;
initArr(&buff, &maxSize);
printf("%d,%d\n", len, maxSize);
for (int i = 0; i < 100; i++)
{
insert(&buff, i + 1, &len, &maxSize);
}
find(buff, 55, &len);
del(buff, 6, &len);
change(buff, 66, 999, &len);
print(buff, len);
free(buff);
return 0;
}
3.创建结构体的方式实现顺序表
#include"stdio.h"
typedef struct
{
int arr[10];
int len;
int maxSize;
}node;
node n;
void init()
{
n.len = 0;
n.maxSize = 10;
}
void insert(int data)
{
if (n.len < n.maxSize)
{
n.arr[n.len] = data;
n.len++;
}
}
void print()
{
for (int i = 0; i < n.len; i++)
{
printf("%d\t", n.arr[i]);
}
printf("\n");
}
void change(int data, int val)
{
for (int i = 0; i < n.len; i++)
{
if (n.arr[i] == val)
{
n.arr[i] = data;
return;
}
}
}
void find(int val)
{
for (int i = 0; i < n.len; i++)
{
if (n.arr[i] == val)
{
printf("你要找的元素是%d下标为:%d\n", n.arr[i], i);
}
}
}
void del(int val)
{
for (int i = 0; i < 10; i++)
{
if (n.arr[i] == val)
{
for (int j = i; j < n.len;j++)
{
n.arr[j] = n.arr[j + 1];
}
n.len--;
i--;
}
}
}
void fun()
{
FILE *file;
file = fopen("1.txt", "w");
char str[10] = { 0 };
for (int i = 0; i < n.len; i++)
{
sprintf(str, "%d", n.arr[i]);
fputs(str, file);
}
fclose(file);
}
int main()
{
init();
insert(4);
insert(5);
insert(5);
insert(6);
insert(7);
insert(8);
insert(9);
fun();
print();
return 0;
}