首页 > 其他分享 >C语言顺序表基本操作

C语言顺序表基本操作

时间:2024-10-25 20:45:22浏览次数:3  
标签:顺序 int MAX printf elem C语言 length ElemType 基本操作

线性表是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使 用的数据结构,常⻅的线性表:顺序表、链表、栈、队列。顺序表一般由一个数组构成,每个元素都连续存放。

头文件

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>

using namespace std;
typedef int ElemType; //给int指定别名
typedef int status ;  //给int指定别名
//此时int与ElemType等价,int与status等价

顺序表的基本操作

顺序表的定义

typedef struct SqList{
	ElemType *elem;   //定义指针 等价于int * elem
	int length ;      //这是顺序表实际长度,例如在插入元素时,如果length==MAX,则需要分配空间;
	int MAX ;         //这是申请成功的数组空间
}SqList;

初始化顺序表

void initlist(SqList &L,int MAX)
{   L.MAX=100 ;
    L.elem=(ElemType *)malloc((L.MAX)*sizeof(ElemType));
    /* L->elem等价于L.elem;
       malloc函数使用规则;
       L.elem=(ElemType *)malloc(sizeof(ElemType)*(L.MAX));
       */
    L.length=0;
   if(L.elem==0)
        printf("顺序表初始化失败!\n");
   else
        printf("顺序表初始化成功!\n");
}

插入数据

/*添加元素:添加元素之前先对其进行判断,若其中的元素实际长度length小于该数组的空间MAX,则可以添加元素
如果大于或等于申请的空间MAX,则不能添加*/
//向表中第i个位置插入数据
int insertlist(SqList &L,int i,ElemType e)
{
	ElemType *newbase,*p,*q ;
	if(i<1||i>L.length+1) return 0;//此处判断插入位置是否合理
	if(L.length>=L.MAX)//此处判断空间是否足够
	{
		newbase=(ElemType *)malloc((L.MAX+20)*sizeof(ElemType));
		if(newbase==0) printf("ERROR!(:newbase)");
		L.elem=newbase;
		L.MAX+=20;
	}
	q=L.elem+i-1;//q指向插入位置
	for(p=L.elem+L.length-1;p>=q;p--)//从最后一个开始到插入位置 元素依次后移
		*(p+1)=*p ;
	*q=e ;//把元素赋给q
	L.length++ ;//长度+1
	return 1;
}

输入数据

/*输入一串元素*/
void inputlist(SqList &L)
{
	if(L.length!=0)
	{
    printf("线性表已满员\n");
	}
	else{
	printf("输入集合A的数据个数:");
	scanf("%d",&L.length) ;
	printf("输入集合A的所有数据(空格隔开):");
	for(int i=0;i<L.length;i++)
	{
		scanf("%d",&L.elem[i]);
	}
}
}

查找定位

//查找定位
void searchlist(SqList &L)
{
	int n,m,flag=0;//定义一个旗帜变量
	printf("请输入要查找定位的元素:");
	scanf("%d",&n);
	if(L.length>0)
	{
		for(int i=0;i<L.length;i++)
		{
			if(L.elem[i]==n)
			{
				flag=1;//如果找到匹配的值,旗帜变量变为1
				m=i+1;//m变为当前的位置
				break;
			}

		}
	}
	else
	{
		printf("该顺序表是空表,ERROR!");//没有数据
	}
	if(flag==1)
	{
		printf("%d位于第%d位\n",n,m);//有数据,且找到
	}
	else
	{
		printf("查找失败,ERROR!\n");//有数据,未找到
	}
}

数据遍历

//遍历
void travelist(SqList &L)
{
	int i ;
	for(i=0;i<L.length ;i++)
		printf("%d ",L.elem[i]);
}

数据删除

//删除
void dellist(SqList &L,int i)
{
    for(int n=i;n<=L.length-1;n++)
    {
        L.elem[n-1]=L.elem[n];
    }
    L.length--;
}

主函数必备操作

int main()
{
    SqList LA;//定义某个线性表
    initlist(LA,100);//初始化某个线性表
    //可以调用函数进行执行
    return 0;
}

malloc()函数 动态分配内存空间。
头文件:#include <stdlib.h>
malloc() 分配一块指定大小的内存空间,用来存放数据。
都是一些基础简单的操作,希望可以提供参考。。。

标签:顺序,int,MAX,printf,elem,C语言,length,ElemType,基本操作
From: https://blog.csdn.net/qq_44946689/article/details/143213905

相关文章

  • C语言指针练习
    题目如下:有1个班,3个学生,各学4门课,计算总平均分以及输出第n个学生的成绩示例代码如下:#include<stdio.h>intmain(){voidaverage(float*p,intn);voidsearch(float(*p)[4],intn);floatscore[3][4]={{65,67,70,60},{80,87,90,81},{90,99,100,98}};......
  • 在C语言中如何实现字符串反转
    在C语言中,要实现字符串反转,基本的方法有三种:1、使用数组来存储字符串并反向输出;2、使用指针进行反向输出;3、使用递归方法将字符串反向输出。在这里,我们将详细介绍如何使用指针进行反向输出。一、使用指针进行反向输出在适用于字符串反转的许多方法中,使用指针实现字符串反转是......
  • C语言-详细讲解-洛谷P1255 数楼梯
    目录1.题目要求2.题目解读 1.如何计算走法数?2.如何解决大数加法,防止数据溢出1.进位的处理2.正序运算,倒序输出3.寻找结果中最高的非零位3.代码实现1.题目要求2.题目解读 一道非常经典的题目,简洁易懂,但需要一定的数学思维,难点如下:1.如何计算走法数?这里需要我......
  • 【C语言】编译和链接(编译环境和运行环境)
    文章目录一、翻译环境和运行环境二、翻译环境1.编译预处理编译汇编2.链接四、运行环境一、翻译环境和运行环境  在ANSIC的任何⼀种实现中,存在两个不同的环境,如下:翻译环境:在翻译环境中,会通过编译和链接两个大步骤,其中编译又分为了预处理(预编译)、编译和汇......
  • 【C语言】扫雷详解(手把手教你敲扫雷)
    目录前言正文开始1.扫雷游戏的分析与设计1.1扫雷游戏的功能说明1.2游戏的分析和设计1.2.1数据结构的分析1.2.2文件结构设计2.代码实现2.1.1文件game.h2.1.2文件game.c2.1.3文件test.c2.2讲解2.2.1主体2.2.2有关定义2.2.3函数1.InitBoard()初始化棋盘2.SetMin......
  • 初阶数据结构【3】--单链表(比顺序表还好的一种数据结构!!!)
    本章概述前情回顾单链表实现单链表彩蛋时刻!!!前情回顾咱们在上一章博客点击:《顺序表》的末尾,提出了一个问题,讲出了顺序表的缺点——有点浪费空间。所以,为了解决这个问题,我们今天就要讲解链表,咱们在讲结构体的时候有提到过链表,链表的最大优点——一点空间也不浪费,用多少......
  • 雷池社区版有多个防护站点监听在同一个端口上,匹配顺序是怎么样的
    如果域名处填写的分别为IP与域名,那么当使用进行IP请求时,则将会命中第一个配置的站点以上图为例,如果用户使用IP访问,命中example.com。如果域名处填写的分别为域名与泛域名,除非准确命中域名,否则会命中泛域名,不论泛域名第几个配置。以上图为例,如果用户使用a.examp......
  • 如何在C语言中进行数据加密
    ##如何在C语言中进行数据加密在讨论C语言中的数据加密时,我们首先需要明确两个核心观点:使用加密库、实现自定义加密算法。其中,使用加密库是最直接且高效的方式,因为这允许开发者利用已经广泛测试和验证的加密算法来保护数据的安全性,而无需深入了解加密算法的内部工作原理。此外,一......
  • 为什么c语言不支持热更新
    ###为什么C语言不支持热更新在讨论为什么C语言不支持热更新时,我们首先需要明确几个核心观点:C语言的编译性质、内存管理机制、以及与操作系统的底层交互方式。编译性质意味着C语言代码在运行前需要被完全编译成机器码,这个过程中产生的是一个静态的、不可变的执行文件。这与热更......
  • 数据结构图的最短路径-弗洛伊德算法(有向图+数据结构课本C++代码一比一转C语言+邻接矩
    弗洛伊德算法有向图代码如下:#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>#include<stdlib.h>#include<limits.h>#defineMaxInt32767#defineMVNum100intPath[MVNum][MVNum];//存放前驱索引的intD[MVNum][MVNum];//存放当前已知的权值//图的邻接......