目录

数据结构代码整理

数据结构代码整理

一、线性表

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; 	
	}
	
}