首页 > 其他分享 >线性表——单链表

线性表——单链表

时间:2024-07-09 09:33:02浏览次数:22  
标签:单链 LNode int void List next NULL 线性表

#include<bits/stdc++.h>
using namespace std;

typedef struct LNode{
	int data;
	struct LNode* next;
}LNode,*List;

//初始化 
void InitList(List &L){
	L=(LNode*)malloc(sizeof(LNode));
	L->next=NULL;
}

//头插 
void ListInsertHead(List &L,int e){
	LNode* p=L;
	LNode* s=(LNode*)malloc(sizeof(LNode));
	s->data=e;
	s->next=p->next;
	p->next=s;
}

//尾插 
void ListInsertTail(List &L,int e){
	LNode* p=L;
	LNode* s=(LNode*)malloc(sizeof(LNode));
	while(p->next!=NULL)
		p=p->next;
	s->data=e;
	s->next=NULL;
	p->next=s;
}

//中间插 
void ListInsertMiddle(List &L,int i,int e){
	LNode* p=L;
	int j=0;
	while(p!=NULL&&j<i-1){
		p=p->next;
		j++;
	}
	if(p==NULL){
		cout<<"Insert Error:Element Not Found!"<<endl;
	}else{
		LNode* s=(LNode*)malloc(sizeof(LNode));
		s->data=e;
		s->next=p->next;
		p->next=s;
	}
}

//删除 
void ListDelete(List &L,int i){
	LNode* p=L;
	int j=0;
	if(p==NULL)
		cout<<"Delete Error:List Empty!"<<endl;
	while(p!=NULL&&j<i-1){
		p=p->next;
		j++;
	}
	if(p==NULL||p->next==NULL){
		cout<<"Delete Error:Element Not Found!"<<endl;
	}else{
		LNode* q=p->next;
		p->next=q->next;
		free(q);
	}
}

//按序号查找 
void GetElem(List L,int i){
	LNode* p=L;
	int j=0;
	while(p!=NULL&&j<i){
		p=p->next;
		j++;
	}
	if(p==NULL)
		cout<<"GetElem Error:LNode Not Defined!"<<endl;
	else
		cout<<"LNode NO."<<i<<" Found!"<<endl;
}

//按值查找 
void LocateElem(List L,int e){
	LNode* p=L->next;
	while(p!=NULL&&p->data!=e)
		p=p->next;
	if(p==NULL)
		cout<<"LocateElem Error:LNode Not Defined!"<<endl;
	else
		cout<<"LNode Value "<<e<<" Found!"<<endl;
}

//求表长 
int Length(List L){
	int len=0;
	LNode* p=L;
	while(p->next!=NULL){
		p=p->next;
		len++;
	}
	return len;
}

//打印 
void PrintList(List L){
	LNode* l=L->next;
	while(l!=NULL){
		cout<<l->data<<" ";
		l=l->next;
	}
	cout<<"END"<<endl;
}

int main(){
	List L;
	InitList(L);
	ListInsertHead(L,5);
	ListInsertHead(L,3);
	ListInsertHead(L,2);
	ListInsertTail(L,7);
	ListInsertTail(L,11);
	ListInsertMiddle(L,3,4);
	ListDelete(L,1);
	PrintList(L);
	cout<<"Length of LinkList:"<<Length(L)<<endl;
	GetElem(L,6);
	LocateElem(L,4);
	return 0;
}

标签:单链,LNode,int,void,List,next,NULL,线性表
From: https://www.cnblogs.com/b1ackstar/p/18291088

相关文章

  • 【数据结构】—— 单链表(single linked list)
    文章目录1、单链表的定义优点和缺点单链表的构成2、单链表的创建初始化:3、单链表的接口实现打印尾插头插尾删头删查找在指定位置之前插入在指定位置之后插入删除指定位置的节点删除指定位置之后的节点销毁链表4、源代码1、单链表的定义单链表(SinglyLinkedList......
  • 单链表在Python中的实现技巧详解
    概要链表是一种常见的数据结构,它由一系列节点组成,每个节点包含一个数据域和一个指向下一个节点的指针。链表的优点是插入和删除操作非常高效,特别是在需要频繁修改数据结构的情况下。本文将详细介绍如何在Python中创建单链表,并包含相应的示例代码,帮助全面掌握这一基础而重要......
  • 【LeetCode 0024】【链表】交换单链表相邻两个节点
    SwapNodesinPairsGivena linkedlist,swapeverytwoadjacentnodesandreturnitshead.Youmustsolvetheproblemwithout modifyingthevaluesinthelist’snodes(i.e.,onlynodesthemselvesmaybechanged.)Example1:**Input:**head=[1,2,3......
  • 【LeetCode 0141】【链表】【双指针之快慢指针】判断给定单链表是否存在环
    LinkedListCycleGivenhead,theheadofalinkedlist,determineifthelinkedlisthasacycleinit.Thereisacycleinalinkedlistifthereissomenodeinthelistthatcanbereachedagainbycontinuouslyfollowingthe next pointer.Internal......
  • 从零开始学习数据结构--2.1线性表之顺序表
    到这一章线性表,我们要掌握的就多了。1.线性表的定义线性表是n个具有相同特性的数据元素的有限序列。我们可以理解为幼儿园排队,在幼儿园里面,每个小朋友都是有一定的序号的,小朋友可以领到他们的专属号码,比如说小明是一号,小花是二号......那么,我们就可以说幼儿园小朋友排队属于......
  • 数据结构——单链表
    1、结构体typedefstructNode{ intdata;//数据域 structNode*next;//后继指针}Node,*List; 注意:单链表最后一个节点的next域未NULL2、头插(重点)//头插,考试重点boolInsert_head(Listplist,intval){ assert(plist!=NULL); if(plist==NULL) retur......
  • C语言编程-基于单链表实现贪吃蛇游戏
    基于单链表实现贪吃蛇游戏1.定义结构体参数蛇行走的方向蛇行走的状态蛇身节点类维护蛇的结构体型2.游戏运行前预备工作定位光标位置游戏欢迎界面绘制游戏地图(边界)初始化游戏中的蛇身创建食物3.游戏运行下一个位置是食物,就吃掉食物,释放该节点下一个位置不是......
  • 02线性表
    线性表线性表是一种逻辑结构,是抽象概念;顺序表、链表是存储结构,两者是不同层次的概念线性表由数据元素组成,数据元素由数据项组成线性表的位序从1开始线性表的基本操作voidInitList(&L);//初始化intLenth(L);//获得表长intLocateElem(L,e);//按值查找操作ElemTypeG......
  • 【数据结构】线性表之《栈》超详细实现
    栈一.栈的概念及结构二.顺序栈与链栈1.顺序栈2.链栈1.单链表栈2.双链表栈三.顺序栈的实现1.栈的初始化2.检查栈的容量3.入栈4.出栈5.获取栈顶元素6.栈的大小7.栈的判空8.栈的清空9.栈的销毁四.模块化源代码1.Stack.h2.Stack.c3.test.c一.栈的概念及结构栈:一种特......
  • c语音实现单链表初始化的四种方式
    typedefstructmyLink{ intdata; structmyLink*next;}myLink,*myLLink;1、对于上面的简单结构,用函数赋值需要传递引用,需要用到指针的指针。对指针使用不是很清楚的童鞋很是头痛。voidinitlink(myLink**head){ *head=(myLink*)malloc(sizeof(myLink)); if(......