栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

数据结构的基础代码

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据结构的基础代码

1.单链表的基本操作:

  <1>定义一个单链表

#include 
#include 
typedef int ElemType;

typedef struct LNode {
	ElemType data;
	struct LNode* next;
}LNode,*linkList;//单链表的定义初始化

<2> 插入元素(带头结点)

bool ListInsert(linkList& L, int i, ElemType e) {//在第i个位置上插入一个元素,(带头结点)
	if (i < 1)
		return false;
	LNode* p;//指针p指向扫描到的结点
	int j = 0;//当前p指向的是第几个结点
	p = L;//L指向头结点,头结点是第0个结点(不存储数据)
	while (p!=NULL&&jnext;
		j++;
	}

	if (p == NULL) {//i值不合法
		return false;
		LNode* s = (LNode*)malloc(sizeof(LNode));
		s->data = e;
		s->next = p->next;
		p->next = s;//将结点s连接到p之后
		return true;//插入成功
	}
}

<3>不带头结点插入

bool ListInsert(linkList& L, int i, ElemType e) {//不带头结点

	if (i < 1)
		return false;
	if (i == 1) {
		LNode* s = (LNode*)malloc(sizeof(LNode));
		s->data = e;
		s->next = L;
		L = s;
		return true;
	}
	LNode* p;
	int j = 1;
	p = L;
	while (p!=NULL && jnext;
		j++;
	}

	if (p == NULL)
		return false;
	LNode* s = (LNode*)malloc(sizeof(LNode));
	if (s == NULL)
		return false;
	s->data = e;
	s->next = p->next;
	p->next = s;
	return true;

}

<4>元素的后插操作

bool InsertNextNode(LNode* p, ElemType e) {
	if (p == NULL)
		return false;
	LNode* s = (LNode*)malloc(sizeof(LNode));
	if (s == NULL)
		return false;
	s->data = e;
	s->next = p->next;
	p->next = s;
	return true;
}

<5>元素按位删除

bool ListDelete(linkList& L, int i, ElemType& e) {//按位序删除
	if (i<1)
		return false;
	LNode* p;//指向扫描点
	int j = 0;//指向第几个结点
	p = L;//指向头结点
	while (p != NULL&&jnext;
		j++;
	}
	if (p == NULL)//i值不合法
		return false;
	if (p->next == NULL)
		return false;//第i-1个结点之后已无其他结点
	LNode* q = p->next;//指向被删除结点
	e = q->data;//用e返回元素的值
	p->next = q->next;//将p结点从链中断开
	free(q);
	return true;
}

<6>元素的按值查找

LNode* LocateElem(linkList L, ElemType e) {//按值查找数据结构为e的结点
	LNode* p = L->next;
	while (p!=NULL&&p->data!=e)
	{
		p = p->next;
		return p;
	}
}

<7>统计表长函数

int Length(linkList L) {//统计表长的函数
	int len = 0;
	LNode* p = L;
	while (p->next!=NULL)
	{
		p = p->next;
		len++;
	}
	return len;
}

<8>正向建立链表

linkList List_TailInsert(linkList& L) {//正向建立单链表
	int x;
	L = (linkList)malloc(sizeof(LNode));
	LNode* s, * r = L;//r为表尾指针
	scanf_s("%d", &x);
	while (x!=9999)
	{
		s = (LNode*)malloc(sizeof(LNode));
		s->data = x;
		r->next = s;
		r = s;
		scanf_s("%d", &x);
	}
	r->next = NULL;
	return L;
}

<9>逆向建立链表

linkList List_HeadInsert(linkList& L) {//逆向建立单链表
	LNode* s;
	int x;
	L = (linkList)malloc(sizeof(LNode));//创建头结点
	L->next = NULL;//初始为空链表
	scanf_s("%d", &x);
	while (x!=9999)
	{
		s = (LNode*)malloc(sizeof(LNode));
		s->data = x;
		s->next = L->next;
		L->next = s;
		scanf_s("%d", &x);
	}
	return L;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/290383.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号