数据结构代码整理
一、线性表
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 100struct 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; }}