数据结构–线性表(数组实现)
初始化、查找,插入、删除操作
#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define True 1
#define False 0
#define MAXSIZE 20
typedef int Status;//函数的返回值类型
typedef int ElemType;//元素类型
typedef struct
{
ElemType Data[MAXSIZE];
int Last;//指向最后一个位置
} Sqlist;//把这个struct取个别名为 Sqlist,相当于 Sqlis = struct Sqlist
Sqlist L;//声明一个结构体线性表
typedef Sqlist* List;//给 线性表的指针结构:Sqlist *,取个别名 List
List PtrL;//声明一个指向线性表的指针
//要访问数组下标为i的元素,List->date[i],L.date[i]
//线性表的长度:L.last+1/PtrL->Last+1;
/*初始化(建立空的顺序表),声明了一个指向线性表结构的指针,并动态的分配内存,最后返回指针,此时应该注意,函数的返回值是指针类型*/
List MakeEmpty()
{
List PtrL;
PtrL = (List)malloc(sizeof(Sqlist));
PtrL->Last = -1;
return PtrL;
}
/*查找*/
int Find(ElemType X, List Ptrl)
{//Sqlist *,取个别名 List
int i = 0;
while(i <= PtrL->Last && PtrL->Data[i] != X)
i++;
if (PtrL->Last < i)
return False;
else
return i;
//O(n)
}
/*插入:在第i个位置上插入一个值为X的新元素*/
Status ListInsert(List PtrL, int i, ElemType X)
{
int k;
if (PtrL->Last == MAXSIZE - 1)
{
printf("表满了");
return ERROR;
}
if (i<1 || i>PtrL->Last + 2)
{
printf("位置错误");
return ERROR;
}
if (i <= PtrL->Last + 1)/*插入的元素不在表尾*/
{
for (k = PtrL->Last; k >= i - 1; k--)
PtrL->Data[k + 1] = PtrL->Data[k];
}
PtrL->Data[i - 1] = X;
PtrL->Last++;
return OK;
}
/*删除元素*/
Status ListDelete(List PtrL, int i, ElemType* e)
{
int k;
if (PtrL->Last == -1)
{
printf("表空\n");
return ERROR;
}
if (i<1 || i>PtrL->Last + 1)
{
printf("删除的位置不合法\n");
return ERROR;
}
if (i < PtrL->Last + 1)
{
for (k = i - 1; k < PtrL->Last + 1; k++)
PtrL->Data[k] = PtrL->Data[k + 1];
}
PtrL->Last--;
return OK;
}