数据结构代码整理
目录
数据结构代码整理
一、线性表
1. 数组
(1)初始化
创建结构体,包括数组元素和数组长度
struct LNode{
ElementType Data[MAXSIZE];
int Last;
};
创建一个空链表,先分配内存,再将指针指向最后一个
List MakeEmpty()
{
List PtrL;
PtrL = (List)malloc(sizeof(struct LNode));
PtrL->Last = -1;
return PtrL;
}
完整代码,别忘了调用<stdlib.h>库
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode * List;
typedef int ElementType;
#define MAXSIZE 100
struct LNode{
ElementType Data[MAXSIZE];
int Last;
};
List MakeEmpty()
{
List PtrL;
PtrL = (List)malloc(sizeof(struct LNode));
PtrL->Last = -1;
return PtrL;
}
int main()
{
List list = MakeEmpty();
free(list);
return 0;
}
(2)查找
int find(ElementType X,List PtrL)
{
int i = 0;
while(i<PtrL->Last&&PtrL->Data[i] != X)
i++;
if (i>PtrL->Last)
return -1;
else return i;
}
(3)插入
将数字插入第 i 个位置
void insert(ElementType X,int i,List PtrL)
{
int j;
if (PtrL->Last ==MAXSIZE-1)
{
print("表满");
}
else if(i<1||i>Ptrl->Last+2)
{
print("插入位置不符合要求")
}
for(j=Ptrl->Last;j>i-1;j--)
{
PtrL->Data[j+1] = PtrL->Data[j]
}
PtrL->Data[i-1] = X;
PtrL->Last++;
return;
}
(4)删除
void Delet(int i,List PtrL)
{
if (PtrL->i<1||PtrL->Last+1)
{
printf("删除不合法");
return;
}
int j;
for (j=i;j<PtrL->Last;j++)
{
PtrL->Data[j-1] = PtrL->Data[j];
}
PtrL->Last--;
return;
}
2. 链表
(1)链表存储
typedef struct LNode * List;
struct LNode{
ElementType Data;
List Next;
};
List PtrL;
struct LNode L;
(2)求表长
int Length(List PtrL)
{
int j = 0;
List P = PtrL;
while(P)
{
P = P->Next;
j++;
}
return j;
}
(3)按序查找
输入长为k,地址为PtrL的链表,返回查找值的地址
List Findth(int k,List PtrL)
{
List P = PtrL;
int j = 0;
while(P != NULL && j <k)
{
P = P->Next;
j++;
}
if (j == k) return P;
else return NULL;
}
(4)按值查找
List Find(ElementType DataX,List PtrL)
{
List P = PtrL;
while(P->Data != DataX && P != NULL)
{
P = P->Next;
}
if (P->Data == DataX) return P;
else if return NULL;
}
(5)插入
List insert(ElemnentType DataX,int i,List PtrL)
{
List S,P;
if (i==1)
{
S = (List)malloc(sizeof(struct LNode));
S->Data = DataX;
S->Next = PtrL;
return S;
}
P = Findth(k-1,PtrL);
if (P==NULL)
{
printf("插入失败");
}
else
{
S = (List)malloc(sizeof(struct LNode));
S->Data = DataX;
S->Next = P->Next;
P->Next = S;
return PtrL;
}
}
(6)删除
这个编的不是很好,需要复习
List Delet(int i,List PtrL)
{
List S,P;
if (i == 1)
{
S = PtrL;
if (PtrL != NULL)
{
PtrL = PtrL->Next;
}
else return NULL;
free(S);
return PtrL;
}
P = Findth(k-1,PtrL);
if (P!= NULL || P->Next != NULL)
{
S = P->Next;
P->Next = S->Next;
free(S);
return PtrL;
}
}