數(shù)據(jù)結(jié)構(gòu)--順序表
#include <stdio.h>
#include <stdlib.h>
typedef struct TABLE
{
int* pHead;? ? ?//指向首元素
int length; //當(dāng)前順序表的長(zhǎng)度
int size; //當(dāng)前元素的數(shù)量
}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("擴(kuò)容失敗\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;
}