IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 数据结构(王道)-顺序表,单链表 (基本代码) -> 正文阅读

[数据结构与算法]数据结构(王道)-顺序表,单链表 (基本代码)

/*顺序表用一串连续的存储单元存储数据元素。*/

/*顺序表的实现——静态分配*/
#define Maxsize 50
typedef struct{
	ElemType data[Maxsize]; //用数组来表示顺序表的元素,ELemType来表示数据元素的类型                                                                                             
	int length;				//当前长度
}SqList;					//静态分配顺序表
//顺序表的实现——动态分配
typedef struct{
	ElemType *data;			//用指针来表示顺序表的元素
	int Maxsize;			//最大容量
	int length;				//当前长度
}SeqList;					//动态分配顺序表

//*基本操作*//


//*插入*//
//*在顺序表L的第i个位置插入e*//
/*L.data[i-1]=e,下标从i-1到length-1的元素依次后移*/
/*i要有范围,[1,length+1],length要有范围,小于Maxsize*/
bool SqList_Insert(SqList &L,int i,ElemType e){
	if (i<1||i>length+1)	return false;
	if (L.length>=Maxsize)	return false;
	for(int j=length;j>=i;j--)//j从length到i
		L.data[j+1]=L.data[j];
	L.data[i-1]=e;//更新L中的数据
	L.length++;
	return true;
}


//*删除*/
/*e=L.data[i-1],下标从i到length-1的元素依次前移*/
/*i要有范围,[1,length]*/
bool SqList_delete(SqList &L,int i,ELemType e){//删除L中的第i个元素,用e返回
	if (i<1||i>length)	return false;
	e=L.data[i-1]; //e要提前表示出来
	for(int j=i;j<length;j++)//j从i到length-1
		L.data[j-1]=L.data[j];
	L.length--;
	return true;
}


//*按位查找*//
bool SqList_GetELem(SqList L,int i){
	return L.data[i-1];}

//*按值查找*//
int SqList_LocateElem(SqList L,ELemType e){
	for(int i=0;i<L.length;i++)//下标从0到length-1,比较是否相等
		if (L.data[i]==e) return i+1;
	return 0;
}
//*链表*//
/*单链表*/

/*定义*/
typedef struct LNode{
	ElemType data;//数据
	struct LNode *next;//指针,指向下一个数据
}LNode,*LinkList;//LNode *L 强调节点,LinkList L 强调单链表

/*带头节点的单链表初始化*/
bool InitList(LinkList &L){
	L=(LNode*)malloc(sizeof(LNode));//分配一个大小为一个LNode数据结构的空间,强制转换为LNode结构
									/*分配一个头结点*/
	if(L==NULL) return false;//内存不足
	L->next=NULL;//头指针之后没有结点
	return ture;
}

/*按位查找结点*/
/*在单链表L中,查找第i个结点(带头结点)*/
LNode *GetElem(LinkList L,int i){//由于查找的是结点,用LNode*定义
	if(i<0) return NULL;
	int j=0;
	LNode *p;
	p=L;
	while(p!=NULL&&j<i){
		p=p->next;
		j++;}
	return p;
}

/*按值查找结点*/
/*在带头结点的单链表L中,查找数据=e的结点*/
LNode *LocateElem(LinkList L,ELemType e){
	LNode *p;
	p=L->next;
	while(p!=NULL&&p->data!=e){
		p=p->next;}
	return p;
}

/*插入*/

/*指定结点的后插操作*/
/*p所指的结点后面插一个结点*/
bool InsertNextNode(LNode*p,Elemtype e){
	if(p==NULL) return false;//保证p所指不为空
	/*新分配一个新结点,来存e*/
	LNode *s=(LNode*)malloc(sizeof(LNode));//
	if(s==NULL) return false;//内存可能满了

	s->data=e;
	s->next=p->next;
	p->next=s;
	return true;
}


/*指定结点的前插操作*/
/*p所指的结点前面插一个结点*/
/*将新分配的结点s后插到p结点上,p的数据放入s,e的数据放入p*/
bool InsertPriorNode(LNode*p,Elemtype e){
	if(p==NULL) return false;//保证p所指不为空
	/*新分配一个新结点,来存e*/
	LNode *s=(LNode*)malloc(sizeof(LNode));//p
	if(s==NULL) return false;

	s->next=p->next;
	p->next=s;

	s->data=p->data;
	p->data=e;
	return true;
}

/*按位序第i个位置上插入e*/
/*找到第i-1个元素,新结点插入其后*/
/*头结点所在位置视为第0个位置*/
bool ListInsert(LinkList &L,int i,ElemType e){
	if(i<1) return false;
	LNode *p;
	p=GetELem(L,i-1);/*找到L中第i-1个结点*/

	InsertNextNode(p,e);/*p所指的结点后面插一个结点*/
}

//*删除*//

/*按位序删除*/
bool DeleteLocate(LinkList &L,int i,ElemType e){
	if(i<1) return false;
	LNode *p;
	p=GetElem(L,i-1);//找到第i-1位

	/*p结点,以及之后的结点不能为空*/
	if(p==NULL||p->next==NULL) return false;
	LNode *q=p->next;//新建一个结点来删除
	p->next=q->next;
	e=q->data;
	free(q);
	return true;
}

/*指定结点删除*/
bool DeleteNode(LNode*p){
	if(p==NULL) return false;
	LNode *q=p->next;
	p->next=q->next;
	p->data=q->data;
	free(q);
	return true;
}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-12-13 13:06:58  更:2021-12-13 13:09:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 16:39:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码