第三章:线性表:单链表

版权声明:如需转载请博客下面留言,并在转载时请标明出处,并附带链接! https://blog.csdn.net/patrick_star_cowboy/article/details/80005332
头文件部分
using namespace std;

#define MAX_SIZE 20
#define OK 1
#define ERROR 0

#define TRUE 1
#define FALSE 0
typedef struct Node
{
	ElemType data;
	struct Node *next;
}Node;
typedef struct Node *LinkList;
Status ClearList(LinkList *L);
void CreateListTail(LinkList *L, int n);
void CreateListHead(LinkList *L, int n);
Status DeleteList(LinkList *L, int i, ElemType *e);
Status InsertList(LinkList *L, int i, ElemType e);
Status GetElem(LinkList L, int i, ElemType *e);
函数实现部分
//取得值
Status GetElem(SqList l, int i, ElemType *e)
{
	if ((l.length == 0) || (i < 1) || (i > l.length))
	{
		return ERROR;
	}
	*e = l.data[i - 1];
	return TRUE;

}
//插入数据
Status ListInsert(SqList *L, int i, ElemType e)
{
	int m;
	if (L->length >= MAX_SIZE)
	{
		return ERROR;
	}
	if (i < 1 || i > L->length + 1)
	{
		return ERROR;
	}
	if (i <= L->length)
	{
		for (m = L->length - 1; m >= i - 1; m--)
		{
			L->data[m + 1] = L->data[m];
		}
	}
	L->data[i - 1] = e;
	L->length++;
	return OK;
}
//删除
Status DeleteList(SqList *L, int i, ElemType *e)
{
	int m;
	if ((L->length == 0) || (i < 1) || (i > L->length))
	{
		return ERROR;
	}
	*e = L->data[i - 1];
	if (i < L->length)
	{
		
		for (m = i - 1; m < L->length - 1; m++)
		{
			L->data[m] = L->data[m + 1];
		}
	}
	L->length--;
	return OK;

} 

Status GetElem(LinkList L, int i, ElemType *e)
{

	int j;
	LinkList p;
	p = L->next;
	j = 1;
	while (p && j < i)
	{
		p = p->next;
		j++;
	}
	if (!p || j > i)
		return ERROR;
	*e = p->data;
	return OK;


}

Status InsertList(LinkList *L, int i, ElemType e)
{
	int m = 1;
	LinkList p, s;
	p = (*L)->next;
	while (p && m < i)
	{
		p = p->next;
		m++;
	}
	if (m > i || !p)
	{
		return ERROR;
		
	}
	s = (LinkList)malloc(sizeof(Node));
	
	s->data = e;
	s->next = p->next;
	p->next = s;
	return OK;
	
}

Status DeleteList(LinkList *L, int i, ElemType *e)
{
	LinkList s, p;
	int m = 1;
	p = (*L)->next;
	while (p && m < i - 1)
	{
		m++;
		p = p->next;
	}
	if (!p || m > i - 1)
	{
		return ERROR;
	}
	s = p->next;
	*e = p->next->data;
	p->next = s->next;
	free(s);
	return OK;
	
}

void CreateListHead(LinkList *L, int n)
{
	int i = n;
	(*L) = new Node;
	(*L)->data = 0;
	(*L)->next = NULL;
	srand(time(0));
	while (n--)
	{
		LinkList p = new Node;
		(p)->data = 666;
		(p)->next = (*L)->next;
		(*L)->next = (p);
	}

}

void CreateListTail(LinkList *L, int n)
{
	
	int i = n;
	*L = new Node;
	(*L)->data = 0;
	(*L)->next = NULL;
	LinkList r;
	r = *L;
	while (i--)
	{
		LinkList p = new Node;
		(p)->data = 666;
		r->next = p;
		r = p;
	}
	r->next = NULL;

}

Status ClearList(LinkList *L)
{
	LinkList r, p;
	r = (*L)->next;

	while (r)
	{
		p = r->next;
		free(r);
		r = p;
	}
	(*L)->next = NULL;
	return OK;
}

main()函数部分

int main(int argc, char** argv)
{
	
	LinkList *s = new LinkList;
	CreateListHead(s, 2);

	int m = 10;
	for (int i = 0; i < 5; i++)
	{
		InsertList(s, m++, i);
	}


	ClearList(s);


	system("pause");
	return 0;
}
单链表的增删改查,头插尾插都在这里了,希望对你有帮助

猜你喜欢

转载自blog.csdn.net/patrick_star_cowboy/article/details/80005332