线性表的链式存储结构基本操作代码实现

版权声明:转载请注明 https://blog.csdn.net/qq_34720818/article/details/88078794

线性表的链式存储结构基本操作代码实现

一、创建单链表:从表尾到表头逆向创建

bool CreateList_L(LinkList L,int n)
{
	printf("------创建链表开始------\n");
	LinkList p;
	for (int i=n;i>0;i--)
	{
		printf("输入第%d个结点数据\n",i);
		p=(LinkList)malloc(sizeof(LNode));
		scanf_s("%d",&p->data);
		//将p插入到表头
		p->next=L->next;
		L->next=p;
	}
	printf("------创建链表完成------\n");
	return true;
}

二、打印链表数据

bool PrintList(LinkList L)
{
	printf("------打印链表数据开始------\n");
	LNode *p=L->next;
	while (p)
	{
		printf("%d ",p->data);
		p=p->next;
	}
	printf("\n------打印完成!------\n");
	return true;
}

三、查找单链表结点

bool GetElem_L(LinkList L,int pos,ElemType *e)
{
	LinkList p=L->next;//L为头指针,p指向头结点
	int j=1;//计数器

	while (p&&j<pos)//寻找p指向第pos个结点或者为空
	{
		p=p->next;
		j++;
	}
	if (!p||j>pos)//pos大于表长或者pos小于1
	{
		return false;
	}
	*e=p->data;
	return true;
}

四、插入结点

bool ListInsert(LinkList L,int pos,ElemType e)
{
	printf("------插入链表结点开始------\n");
	LinkList p=L;//p指向头节点
	int j=0;//计数器
	while (p&&j<pos-1)//寻找p指向第pos-1个结点
	{
		p=p->next;
		j++;
	}
	if (!p||j>pos-1)
	{
		return false;
	}
	LinkList s=(LinkList)malloc(sizeof(LNode));
	s->data=e;
	s->next=p->next;
	p->next=s;
	printf("------插入链表结点数据%d完成------\n",e);
	return true;
}

五、删除结点

bool ListDelete(LinkList L,int pos,ElemType *e)
{
	printf("------删除链表结点开始------\n");
	LinkList p=L;
	int j=0;
	while (p->next&&j<pos-1)//寻找p指向第pos-1个结点
	{
		p=p->next;
		j++;
	}
	if (!p->next||j>pos-1)
	{
		return false;
	}
	LinkList q=p->next;
	p->next=q->next;
	*e=q->data;
	free(q);
	printf("------删除链表结点数据%d完成------\n",*e);
	return true;
}

六、获取表长

int ListLength(LinkList L)
{
	LinkList p=L->next;
	int len=0;
	while (p)
	{
		len++;
		p=p->next;
	}
	return len;
}

七、判断链表中是否有某数据

bool IsListData(LinkList L,ElemType dt)
{
	LinkList p=L->next;
	for (int i = 0; i < ListLength(L); i++)
	{
		if (dt==p->data)
			return true;
		p=p->next;
	}
	return false;
}

六、程序运行

#include "stdafx.h"
#include "malloc.h"
#include "stdio.h"
#include "stdlib.h"
int _tmain(int argc, _TCHAR* argv[])
{
	printf("输入创建链接结点个数\n");
	int n;
	scanf_s("%d",&n);

	LinkList L;
	L=(LinkList)malloc(sizeof(LNode));
	L->next=NULL;//建立带头结点的单链表

	CreateList_L(L,n);
	PrintList(L);

	ListInsert(L,4,4);
	PrintList(L);

	ElemType *e=(ElemType*)malloc(sizeof(ElemType));
	ListDelete(L,4,e);
	PrintList(L);

	GetElem_L(L,1,e);
	printf("链表第1个结点数据为%d\n",*e);

	system("pause");
	return 0;
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_34720818/article/details/88078794
今日推荐