文档章节

数据结构-线性表

小木fan
 小木fan
发布于 2017/07/28 15:52
字数 685
阅读 2
收藏 0

 

注:1.单链表头结点没有数据data,且逻辑序号为i = 0,p = L;

       2.限制条件,判断某元素是否在单链表中,类似顺序表中i < n,单链表p!=NULL

       3.插入数据元素时,j必须从0开始。

       

#include<iostream>
#include<stdlib.h>
using namespace std;
typedef struct LNode
{
	char data;
	struct LNode * next;
}LinkList;
//尾插法建单链表
void CreateList(LinkList *&L,char a[],int n)
{
	int i;
	LinkList * r,*s;
	//头结点为空
	L = (LinkList *)malloc(sizeof(LinkList));
	r = L;
	for(i = 0;i < n;i++)
	{
		s = (LinkList *)malloc(sizeof(LinkList));
		s->data = a[i];
		r->next = s;
		r = s;
	}
	r->next = NULL;
}
//判断单链表是否为空
bool ListEmpty(LinkList *&L)
{
	return (L->next == NULL);
}
//单链表的节点个数
int ListLength(LinkList *&L)
{
	int n = 0;
	LinkList * p = L;
	while(p->next != NULL)
	{
		n++;
		p = p->next;
	}
	return n;
}
//输出单链表的各节点的值
void DispList(LinkList *&L)
{
	LinkList * p = L->next;
	while(p != NULL)
	{
		cout<<p->data<<" ";
		p = p->next;
	}
    cout<<endl;
}
//查找第3个节点,并将其输出出来
void GetElem(LinkList *&L,int i)
{
	int j = 0;
	LinkList * p = L;
	if(i <= 0)
		cout<<"i值不正确";
	else
	{
		while(j < i && p != NULL)
		{
			j++;
			p = p->next;
		}
		if(p == NULL)
		   cout<<"p为空";
		else
		    cout<<"第i个节点值为"<<p->data<<endl;
	}
}
//查找与e相等的第一个节点,若存在,返回逻辑序号,否则返回0
void LocateElem(LinkList *&L, int e)
{
	int i = 1;
	LinkList * p = L->next;
	while(p != NULL && p->data != e)
	{
		p = p->next;
		i++;
	}
	if(p != NULL)
		cout<<"与e相等的节点的逻辑序号为"<<i<<endl;
	else
		cout<<"查找错误"<<endl;

}
//插入数据元素
void InsertList(LinkList *&L,int i,char e)
{
	int j = 0;
	LinkList * p = L,*s;
	while(j < i - 1 && p != NULL)
	{
		j++;
		p = p->next;
	}
	if(p != NULL)
	{
		s = (LinkList *)malloc(sizeof(LinkList));
		s->data = e;
		s->next = p->next;
		p->next = s;
	}
}
//删除数据元素,删除第i个元素
void ListDelete(LinkList *&L,int i)
{
	int j = 0;
	LinkList * p = L;
	while(j < i - 1 && p != NULL)
	{
		j++;
		p = p->next;
	}
	if(p != NULL)
	{
		p->next = p->next->next;
	}
}
int main()
{
	LinkList * L;
	char a[101];
	int n,i;
	cin>>n;
	for(i = 0;i < n;i++)
		cin>>a[i];
	CreateList(L,a,n);
	//判断单链表是否为空
    cout<<"是否为空:"<<ListEmpty(L)<<endl;
	//返回单链表的节点个数-长度
    int length = ListLength(L);
	cout<<"节点个数:"<<length<<endl;
	//输出单链表的各节点的值
	cout<<"单链表各节点的值:";
	DispList(L);
    //查找第3个节点,并将其输出出来
	int g;
	cout<<"输入第几个节点i:";
	cin>>g;
    GetElem(L,g);
	//查找与e相等的第一个节点,若存在,返回逻辑序号,否则返回0
	char e;
	cout<<"输入e的值:";
	cin>>e;
    LocateElem(L,e);
	//插入数据元素
    int k;char ke;
	cout<<"输入插入位置i的值及插入数据e的值:";
	cin>>k>>ke;
    InsertList(L,k,ke);
    DispList(L);
	//删除数据元素,删除第i个元素
	int di;
	cout<<"输入删除的第i个元素的i:";
	cin>>di;
	ListDelete(L,di);
    DispList(L);
	return 0;
}

 

© 著作权归作者所有

小木fan
粉丝 1
博文 52
码字总数 13186
作品 0
绵阳
私信 提问

暂无文章

idea修改新的git地址

我们在项目变动中通常会遇到更换git地址情况,这里介绍一个在idea项目中简单更换git地址操作: 1、点击VCS; 2、点击Git; 3、点击Remotes; 具体步骤如图 4、点击框中链接即可在右边看到一个...

west_coast
25分钟前
6
0
将规则集传递给mixin

允许包装在mixin中定义的css块。 分离的规则集是一组CSS属性、嵌套规则集、媒体声明或者是存储在变量中的任何其他内容,我们可以将它包含在规则集中或其他结构中,并且所有属性都将复制到那里...

凌兮洛
26分钟前
4
0
玩转阿里云 Terraform(一):Terraform 是什么

从本文起,我将陆续推出一系列有关 Terraform 的文章,从概念,特点,工作机制,用法以及最佳实践等多个方面由浅入深的向大家介绍如何在阿里云上玩转 Terraform。同时也希望借此机会,与感兴...

阿里云官方博客
27分钟前
4
0
科研大数据面临的挑战

近几十年硬件的发展非常迅猛,第一台Macintosh苹果电脑的内存是128KB(0.13MB),现在很多笔记本配的是8GB的内存,硬盘1TB(1024GB),2TB的很常见。大型的数据服务器上还会有更大的储容量,...

英论阁学术院
27分钟前
5
0
python学习10.09:Python列表和元组的底层实现

有关列表(list)和元组(tuple)的底层实现,本节分别从它们的源码来进行分析。 首先来分析 list 列表,它的具体结构如下所示: typedef struct { PyObject_VAR_HEAD /* Vector o...

太空堡垒185
28分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部