数据结构学习---线性表链表实现

链表

首先是结构体

typedef int ElementType; //为了便于修改链表中元素的类型
typedef struct Node{
	ElementType Date;
	struct Node* Next;
}List;
List L,*Ptrl;

求链表长度的函数

int length(List *Ptrl){
	List* p =Ptrl;
	int j=0;
	while(p){
		p=p->Next;
		j++;
	}
	return j;
}

通过位置查找

List* FindKth(int k,List *Ptrl){
	List *p=Ptrl;
	int i=0;
	while(p!=NULL && i<k){
		p=p->Next;
		i++;
	}
	if(i == k)
		return p;
	else
		return NULL;

}

通过值查找

List* Find(ElementType X ,List* Ptrl){
	List* p =Ptrl;
	while(p!=NULL && p->Date!=X){
		p=p->Next;
	}
	return p;
}

插入

/*构造节点,找到i-1个节点,插入节点*/
List* Insert(ElementType X,int i ,List* Ptrl){
    List* s, * p;
    if(i==1){
        s=(List*)malloc(sizeof(List));
        s->Date = X;
        s->Next = Ptrl;
        return s;
    }
    p = FindKth(i-1,Ptrl);
    if(p== NULL){
        cout<<"参数错"<<endl;
        return NULL;
    }
    else{
        s=(List*)malloc(sizeof(List));
        s->Date = X;
        s->Next = p->Next;//位置不能颠倒
        p->Next = s;
        return Ptrl;
    }
}

删除

List* Delete(int i,List* Ptrl){
	List *p, *s;
	if(i==1){ //删除头结点
		s=Ptrl;
		if(Ptrl!=NULL)
			Ptrl=Ptrl->Next;
		else return NULL;
		free(s); //不要忘了释放空间
		return Ptrl;
	}
	p = FindKth(i-1,Ptrl);
	if(p== NULL){
		printf("第%d个节点不存在",i-1);
		return NULL;
	}
	else if(p->Next == NULL){
		printf("第%d个节点不存在",i);
		return NULL;
	}
	else{
		s=p->Next;//用新创建的指针指向要删除的
		p->Next = s->Next;
		free(s);
		return Ptrl;
	}
}

【测试的主函数】

int main(){
	List* p=(List*)malloc(sizeof(List));
	p->Next = NULL;
	p->Date=2;
	p=Insert(5,1,p);
	p=Insert(3,2,p);
	p=Insert(5,2,p);
	cout<<"长度为:  "<<length(p)<<endl;
	List* po = FindKth(2,p);
	if(po==NULL)
		cout<<"不存在"<<endl;
	else{
		cout<<po->Date<<endl;
	}
	p=Delete(2,p);
	po = FindKth(2,p);
	if(po==NULL)
		cout<<"不存在"<<endl;
	else{
		cout<<po->Date<<endl;
	}
	return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-12 23:41:29

数据结构学习---线性表链表实现的相关文章

数据结构学习——线性表

线性表一般分为顺序结构和链式结构. 顺序表里面元素的地址是连续的,如数组: 链表里面节点的地址不是连续的,是通过指针连起来的,如单链表: 顺序表和链表结构各自的优缺点:(引自百度知道) ①顺序结构: 优点:易于查询,索引快 list[n]这样的操作,O(1)复杂度 缺点:扩展性弱,不易删除.添加. ②链表结构: 优点:扩展性强,易于删除.添加 缺点:不易于查询,索引慢,list[n]这样的操作,复杂度为O(n)

数据结构之 线性表--链表的逆置

数据结构实验之链表三:链表的逆置 Time Limit: 1000MS Memory limit: 65536K 题目描述 输入多个整数,以-1作为结束标志,顺序建立一个带头结点的单链表,之后对该单链表的数据进行逆置,并输出逆置后的单链表数据. 输入 输入多个整数,以-1作为结束标志. 输出 输出逆置后的单链表数据. 示例输入 12 56 4 6 55 15 33 62 -1 示例输出 62 33 15 55 6 4 56 12 #include <iostream> #include <

数据结构线性表链表的C语言实现

                                                                                      数据结构线性表链表的C语言实现      说明:线性表是一种最简单的线性结构,也是最基本的一种线性结构,所以它不仅是学习中的重点,也是应用开发非常常用的一种数据结构.它可以分为顺序表和链表.它的主要操作是数据元素的插入,删除,以及排序等.接下来,本篇文章将对线性表链表的基本操作和运用进行详细的说明(包含在源代码的注释中),并给

[笔记]python数据结构之线性表:linkedlist链表,stack栈,queue队列

python数据结构之线性表 python内置了很多高级数据结构,list,dict,tuple,string,set等,在使用的时候十分舒心.但是,如果从一个初学者的角度利用python学习数据结构时,这些高级的数据结构可能给我们以迷惑. 比如,使用list实现queue的时候,入队操作append()时间复杂度可以认为是O(1),但是,出队操作pop(0)的时间复杂度就是O(n). 如果是想利用python学学数据结构的话,我觉得还是自己实现一遍基本的数据结构为好. 1.链表 在这里,我想使

数据结构:线性表之单链表

线性表(亦作顺序表)是最基本.最简单.也是最常用的一种数据结构.线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的.线性表有两种存储结构: ①顺序存储结构,即存储单元在一段连续的地址上存储,常见的数组就是顺序存储结构的线性表: ②链式存储结构,即存储单元在不连续的地址上存储.因为其不连续性,除了要存数据元素信息(数据域)外,还要存储它后继元素(结点)的地址(指针域,链).学习链式结构最好将结点结构牢记于心,如下图: 链表的每个结点只含有一个指

软考之路--数据结构之线性表

数据就是数值,也就是我们通过观察.实验或计算得出的结果.数据有很多种,最简单的就是数字.数据也可以是文字.图像.声音等.数据可以用于科学研究.设计.查证等.结构,组成整体的各部分的搭配和安排,两者完美结合在一起,我们这样需要重新认识她,对她重新审视与定义:数据结构是程序设计的重要理论和技术基础,她所讨论的内容和技术,对从事软件项目的开发有重要作用,通过学习数据结构,我们学会从问题出发,分析和研究计算机加工的数据的特性,以便为应用所设计的数据悬着适当的逻辑结构.存储结构及其相应的操作方法,为提高应

数据结构学习之单链表基本操作

数据结构学习之单链表基本操作 0x1 前言 今天实验课,学习了下单链表的写法,这里记录下. 0x2 正文 题目要求如下: 本实验的单链表元素的类型为char,完成如下实验要求: (1)初始化单链表h (2)采用尾插法依次插入a.b.c.d.e (3)输出单链表h (4)输出单链表h的长度 (5)判断单链表h是否为空 (6)输出单链表h的第3个元素 (7)输出元素a的逻辑位置 (8)在第4个元素位置上插入元素f (9)输出单链表h (10)删除单链表h的第3个元素 (11)输出单链表h (12)释

数据结构学习之双链表基本操作

数据结构学习之双链表基本操作 0x1 前言 今天实验课,学习了下双链表的写法,这里记录下. 0x2 正文 题目要求如下: 本实验的双链链表元素的类型为char,完成如下实验要求: (1)初始化单链表h (2)采用尾插法依次插入a.b.c.d.e (3)输出单链表h (4)输出单链表h的长度 (5)判断单链表h是否为空 (6)输出单链表h的第3个元素 (7)输出元素a的逻辑位置 (8)在第4个元素位置上插入元素f (9)输出单链表h (10)删除单链表h的第3个元素 (11)输出单链表h (12)

自学数据结构——顺序线性表

胡乱写了一些代码 /* ============================================================================ Name : sqlist.c Author :codecup Version : Copyright : Your copyright notice Description : Hello World in C, Ansi-style ==========================================