数据结构--顺序表
#include <stdio.h>
#include <stdlib.h>
typedef struct TABLE
{
int* pHead; //指向首元素
int length; //当前顺序表的长度
int size; //当前元素的数量
}Table;
#define LENGTH 5
Table InitTable()
{
Table t;
t.pHead = (int*)malloc(sizeof(int) * LENGTH);
if (!t.pHead)
{
printf("初始化失败!\n");
exit(0);
}
t.length = LENGTH;
t.size = 0;
return t;
}
//遍历顺序表
void DisplayTable(Table t)
{
if (NULL==t.pHead || t.length ==0)
{
return;
}
for (int i = 0; i < t.size; i++)
{
printf("%d ", t.pHead[i]);
}
printf("\n");
}
//插入元素
void InsertTable(Table* pT, int value, int n)
{
//判断插入位置是否有效
if (!pT || !pT->pHead)
{
return;
}
if (n-1 > pT->size || n < 1)
{
printf("插入位置有误!\n");
return;
}
//判断空间是否够用
if (pT->length == pT->size)
{
pT->pHead = realloc(pT->pHead, sizeof(int) * (pT->length + 1));
pT->length++;
if (pT->pHead == NULL)
{
printf("扩容失败\n");
exit(0);
}
}
for (int i = pT->size; i >= n; i--)
{
pT->pHead[i] = pT->pHead[i - 1];
}
pT->pHead[n - 1] = value;
pT->size++;
}
//删除元素
void DeleteTable(Table* pT, int n)
{
if (n > pT->size || n < 1)
{
printf("删除位置有误!\n");
return;
}
for (int i = n - 1; i < pT->size - 1; i++)
{
pT->pHead[i] = pT->pHead[i + 1];
}
pT->size--;
}
int main()
{
Table t = InitTable();
for (int i = 0; i < 5; i++)
{
InsertTable(&t, i + 10, i + 1);
}
DisplayTable(t);
InsertTable(&t, 15, 6);
DisplayTable(t);
InsertTable(&t, 5, 3);
DisplayTable(t);
DeleteTable(&t, 3);
DisplayTable(t);
return 0;
}