小工具      在线工具  汉语词典  css  js  c++  java

顺序表与链表的操作

程序、数据结构与算法,链表,数据结构 额外说明

收录于:152天前

继上一节C语言实现序列表和链表创建可以知道顺序表是借助数组实现连续空间的处理,而在链表中每个结点是同一级别的变量,通过记录地址实现连接。

线性表的抽象定义中也定义了基准测试的基本操作,如下:

  • 顺序表
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 10
typedef struct{
    
	int item[MAXSIZE];
	int length;
}SeqList;


//初始化
int InitList(SeqList *L){
    
	//L->item = (int*)malloc(sizeof(int)*10); 动态分配数组
	L->item[0] = {
    };   //初始化
	L->length = 0;
	return 0;
}

//插入元素
int Insert(SeqList *L,int e,int n){
    
	if(n<1 || n>L->length) {
       //插入位置大于当前删除在最后插入,输入位置无效
		L->item[n-1] = e;
		return 1;
	}
	if(L->length == MAXSIZE) return 0;
	for(int i =L->length-1;i>=0;i--){
       //从i之后的位置元素整体后移
		L->item[i+1]= L->item[i];
	}
	L->item[n-1] = e;
	L->length++;
	return 1;
}

//删除
int Delete(SeqList *L,int n){
    
	if(n<1 || n>L->length) return 0;
	for(int i = n-1;i<L->length;i++){
       //删除位置后面的元素整体前移
		L->item[i] = L->item[i+1];
	}
	L->length--;
	return 1;
}

//取值
int GetLocate(SeqList *L,int n){
    
	if(n<1 || n>MAXSIZE) return 0;
	int e = L->item[n-1];
	return e;
}

//查找
int Query(SeqList *L,int e){
    
	for(int i =0;i<L->length;i++){
    
		if(L->item[i] == e) return i+1;
	}
	return 0;
}


int main(){
    
	SeqList L;
	InitList(&L);
	Insert(&L,3,1);
	int e = GetLocate(&L,1);
	printf("%d",e);
}
  • 链表
#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0

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


int main(){
    
	//生成链表
	LinkList* L = (LNode*)malloc(sizeof(LNode));
	//链表必须存在头指针
	LNode* head = L;
	printf("输入添加元素的个数:\n");
	int e,length;
	scanf("%d",&length);
	for(int i=0;i<length;i++){
    
		//创建新结点
		LNode* node = (LNode*)malloc(sizeof(LNode));
		printf("请输入:");
		scanf("%d",&e);
		node->data = e;
		node->next =NULL;
		head->next = node;
		head = node;     //头指正记录当前最后一个结点
	}	
	//打印链表
	while(L->next != NULL){
    
		L=L->next;
		printf("%d",L->data);
	}
}

在链表的创建时是在主函数中创建的,若干零散的变量通过指针联系在一起,那么要遵循模块化开发,都放在主函数是不合理的。此时就需要借助malloc函数了,该方法创建的变量存在于堆内存中,随程序的运行一直存在,就如同创建了一个全局变量。

因此,创建链表的步骤也可以模块化并在一个方法中执行。

#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0

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

int InitList(LinkList *L);
int AddElem(LinkList *L,int e);
void dislapy(LinkList *L);
int CreateList(LinkList *L, int e);

int main(){
    
	
	LinkList *L;
	InitList(L);
	CreateList(L,3);
	printf("%s","fgdfdkjgfd");
	/* LinkList* L = &list; //不可省略,不能直接传递 InitList(L); AddElem(L,5); AddElem(&L,10); AddElem(&L,6); AddElem(&L,3); */
	//dislapy(L);

	return 1;
}

//new是c++的初始化方法,c预言中改为malloc(用起来复杂)
int InitList(LinkList *L){
    
	L = (LNode*)malloc(sizeof(LNode));   //分配内存空间 c++使用new关键字
	L -> data = 0;
	L -> next = NULL;
	return 1;
}

int CreateList(LinkList *L, int e){
    
	//链表必须存在头指针
	LNode* head = L;
	//创建新结点
	LNode* node = (LNode*)malloc(sizeof(LNode));
	node->data = e;
	node->next =NULL;
	head->next = node;
	head = node;     //头指正记录当前最后一个结点
	
}

//插入
int InsertElem(LinkList *L,int e){
    
	//生成一个新节点 (malloc生成为全局变量)
	LNode *node = (LNode*)malloc(sizeof(LNode));
	//值赋值个新结点
	node->data = e;
	node->next = NULL;
	//将元素放到最后(尾插法特殊形式)
	while(L->next != NULL){
    
		L = L ->next;     //头结点指向下一个结点,判断是否为尾结点 (尾结点的指向NULL)
	}
	node->next = L->next;   //新结点的后继指针域指向尾结点的后置指针域
	L->next = node;   //尾结点后继结点指向新结点
	return OK;	
}

//删除
int DeleteElem(LinkList *L,int i){
    
	int j =0;
	LNode *p = L;
	while(L->next != NULL){
    
		j++;
		p = p->next;
		if(j == i){
    
			p->next = p->next->next;
			return 1;
		}
	}
	return 0;
}

//遍历
void dislapy(LinkList* L){
    
	while(L->next != NULL){
    
		//TODO
		printf("%d",L->data);
	}
}
. . .

相关推荐

额外说明

【数据结构】栈及其Java代码实现

什么是栈 栈(Stack)也叫作堆栈,是允许在同一端进行插入和删除操作的特殊线性表。其中允许插入和删除操作的一端叫作栈顶(Top),另一端叫作栈底(Bottom),栈底是固定的,栈顶是浮动的,栈中的元素为0时,栈是空栈。插入叫作进栈(push),删除叫作

额外说明

Java8使用stream().filter()过滤List对象(查找满足条件的对象集合)

测试数据准备 //测试数据,请不要纠结数据的严谨性 List<StudentInfo> studentList = new ArrayList<>(); studentList.add(new StudentInfo("李小明",true,18,1.76

额外说明

springboot知识点

Spring Boot的主要目标是简化Spring应用程序的初始化和开发过程。它提供了一种快速开发的方式,开发者可以通过少量的配置来创建独立的、生产级别的Spring应用程序。Spring Boot内置了许多默认配置,这样开发者不需要在每个项目中都进行配

额外说明

智源发布最强开源可商用中英文语义向量模型 BGE,超越同类模型,解决大模型制约问题

0.介绍 语义向量模型(Embedding Model)已经被广泛应用于搜索、推荐、数据挖掘等重要领域。 在大模型时代,它更是用于解决幻觉问题、知识时效问题、超长文本问题等各种大模型本身制约或不足的必要技术。然而,当前中文世界的高质量语义向量模型仍比较稀

额外说明

玩转AIGC:打造令人印象深刻的AI对话Prompt

玩转AIGC:打造令人印象深刻的AI对话Prompt 《玩转AIGC:打造令人印象深刻的AI对话Prompt》 摘要 引言 正文 良好的Prompt:引发AI深度交流的法宝 ✨ 探讨不同的提问方式 1. 常规提问 2. 创意提问 对话交流的艺术:倾听与引

额外说明

Java学习笔记5.3.2 Set接口 - TreeSet类

文章目录 零、本讲学习目标 一、TreeSet类 (一)TreeSet类概述 (二)TreeSet类API文档 (三)TreeSet类结构图 (四)TreeSet对象存储原理 1、结构说明 2、存储原理 3、存储过程 (1)添加元素 (2)存储过程 4、

额外说明

ctf.show web 刷题记录

文章目录 红包题第二弹 web13 web14 方法一 方法二 红包题第六弹 红包题第二弹 打开题目,提示参数cmd 我们随便输入?cmd=1 得到源代码 ctf.show_红包题 where is the flag? <?php #error_rep

额外说明

Windows系统缺少pcacli.dll文件导致程序错误问题

其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个pcacli.dll文件(挑

额外说明

Windows系统丢失pdh.dll文件导致系统功能异常问题

其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个pdh.dll文件(挑选合适

额外说明

wordpress克隆站点_创建WordPress会员站点的终极指南

WordPress 克隆站点 您想建立一个会员网站吗?长期以来,网站仅依靠广告和联属收入所有者来将其内容货币化。 您想建立一个会员网站吗?长期以来,网站所有者仅依靠广告和联属网络营销收入来通过其内容获利。 A membership website all

ads via 小工具