数据结构—顺序表基本操作(c语言代码)
顺序表
计算机内部存储一张线性表是用一组连续地址内存单元,这种存储结构即为顺序存储结构,这种结构下的线性表叫顺序表。
顺序表有两种定义方法:
1.静态定义
2.动态生成
顺序表是最简单的一种线性存储结构,优点:构造简单,操作方便,通过顺序表的首地址(或数组名)可直接对表进行随机存取
缺点:可能浪费存储空间,插入或者删除时候需要对后边一系列的数据进行操作,效率低
下面举两个实例并附上c语言代码+注释来理解
静态顺序表
/********************************************************************************
创建一个静态的顺序表存放整数,大小为10,完成以下的操作
1.输入6个整数,打印出顺序表的内容,并显示表中剩余空间的个数
2.在顺序表的第三个位置处插入元素0,打印出表中的内容,并显示空间中剩余的个数
3.再试图插入表中第11个位置整数0,程序提示超出范围
4.删除表中第6个元素,最后显示空间中剩余的个数
*********************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#define MaxSize 10
/** 函数inserElem的作用:顺序表Sqlist第i个位置上插入元素x,并将长度加1 */
/** 向顺序表中插入元素 */
/** 参数Sqlist:表首地址 */
/** 参数*len:表的长度 */
/** 参数i:插入元素的位置 */
/** 参数x:待插入的元素值 */
void insertElem(int Sqlist[] , int *len , int i , int x)
{int t;if(*len==MaxSize || i<1 || i>*len+1) //长度为len的顺序表可插入的位置为1-len+1 其余的还有表已满的情况均超出范围{printf("非法插入\n");return;}for(t = *len-1 ; t>=i-1 ; t--)Sqlist[t+1] = Sqlist[t]; //将i-1后的元素顺序后移一个元素的位置Sqlist[i-1] = x; //插入元素*len = *len+1; //表长加1
}/** 函数inserElem的作用:顺序表Sqlist第i个位置上插入元素x,并将长度加1 */
/** 向顺序表中删除元素 */
/** 参数Sqlist:表首地址 */
/** 参数*len:表的长度 */
/** 参数i:插入元素的位置 */
void DelElem(int Sqlist[] , int *len , int i)
{int j;if(i<1 || i>*len){printf("非法删除\n");return;}for(j =i ; j<=*len-1 ; j++)Sqlist[j-1] = Sqlist[j];*len = *len-1;
}
/** 测试函数 根据题目要求 */
int main()
{int Sqlist[MaxSize];int len;int i;for(i = 0 ; i<6 ; i++){scanf("%d",&Sqlist[i]);}len = 6;for(i= 0 ; i<len ; i++)printf("%d\t",Sqlist[i]);printf("\n剩余空间为%d\n" , MaxSize - len);insertElem(Sqlist , &len , 3 , 0); //表中第三个位置插入整数0for(i= 0 ; i<len ; i++)printf("%d\t",Sqlist[i]);printf("\n剩余空间为%d\n" , MaxSize - len);insertElem(Sqlist , &len , 11 , 0); //表中第11个位置插入0DelElem(Sqlist , &len , 6); //删除第六个元素for(i= 0 ; i<len ; i++)printf("%d\t",Sqlist[i]);printf("\n剩余空间为%d\n" , MaxSize - len);return 0;
}
/*********************************************动态的创建一个顺序表*初始长度10,向顺序表中输入15个整数,并打印*再删除顺序表中的第五个元素,打印出结果********************************************/
#include<stdio.h>
#include<conio.h>
#define MaxSize 10
#include<bits/stdc++.h>
/* 定义一个结构体Sqlist */
typedef struct{int *elem; //指向顺序表的首地址 int length; //顺序表中表的长度(表中元素的个数) int listsize; //顺序表存储空间容量
}Sqlist;
/* 通过一个函数initSqlist实现动态的生成一个顺序表 初始化一个顺序表 */
/* 参数L:Sqlist类型的指针 因为是指针所以可以在函数中直接对顺序表进行操作 */
void initSqlist(Sqlist *L){//调用malloc函数动态分配一段空间,并将空间首地址赋给L的elem成员,L->elem指向顺序表的首单元 L ->elem = (int *)malloc(MaxSize*sizeof(int)); if(!L ->elem) exit(0);L -> length = 0; //置0表示表空 刚生成 L -> listsize = MaxSize; //置MaxSize 表示空间大小
}//Sqlist类型的变量L就代表了一张顺序表 可以灵活操作 L->elem头地址 L->length长度 L->MaxSize容量 /******************** *向顺序表中插入元素*参数L :Sqlist类型的指针*参数i:插入元素的位置*参数item:插入的元素*********************/
void InsertElem(Sqlist *L, int i, int item){//向顺序表L中的第i个位置插入元素itemint *base, *insert_ptr, *p;if(i < 1 || i > L->length+1) exit(0); //非法插入 退出 if(L->length >= L->listsize){//realloc函数重新追加空间 ******动态顺序表的优势******** 静态顺序表内存大小固定不变 动态可以随时扩充 base = (int *)realloc(L->elem, (L->listsize +10)*sizeof(int));L->elem = base; //更新内存基址 L->listsize = L->listsize + 100; //内存空间增大100单元 }insert_ptr = &(L ->elem[i-1]); //insert_ptr为插入位置 for(p = &(L ->elem[L->length-1]); p >= insert_ptr; p--)*(p+1) =* p; //将i-1后的元素顺序后移一个元素的位置 * insert_ptr = item; //在第i个位置上插入元素item L->length++; //表长+1
} /******************** *从顺序表中删除元素*参数L :Sqlist类型的指针*参数i:删除元素的位置*********************/
void DelElem(Sqlist *L, int i)
{//从顺序表L中删除第i个元素int *delitem, *q;if(i < 1 || i > L->length) exit(0); //非法删除 delitem = &(L->elem[i-1]); //delitem指向第i个元素 q = L->elem + L->length-1; //q指向表尾 for(++delitem; delitem <= q; ++delitem)*(delitem-1) =* delitem; //将第i位置以后的元素依次前移 L->length--; //表长-1 }/******************** *测试函数 *********************/
int main()
{Sqlist l;int i;initSqlist(&l);printf("表中数据:");for(i =0; i<15; i++)InsertElem(&l, i+1, i+1);for(i = 0; i<l.length; i++)printf("%3d",l.elem[i]);printf("\n删除后的结果:");DelElem(&l, 5);for(i = 0; i<l.length; i++)printf("%3d",l.elem[i]);getche();return 0;
}
数据结构—顺序表基本操作(c语言代码)相关推荐
- 数据结构-顺序表基本操作(C语言实现)
参考书:王道考研数据结构 //函数的声明 SqList InitList(l); //初始化一个顺序表 void PrintfLi ...
- 顺序表基本操作算法——基础代码(C语言)
创建一个顺序表(数据元素个数为5), 输出顺序表中的所有数据元素 查找第3个位置上的元素 查找元素15是否在顺序表中,如果在,请输出该元素在顺序表中的位置 在顺序表中的第1个位置插入数据0 删除刚刚插 ...
- 数据结构 - 线性表(顺序表)C语言代码实现-处理整型数据(附详细解释)。 _清风明月
#include <stdio.h> #include <conio.h> //conio是Console Input / Output(控制台输入输出)的简写,其中定义了通过 ...
- 数据结构-单链表基本操作-C语言代码
单链表基本操作 1.头插法建立单链表 2.尾插法建立单链表 3.查找结点 3.修改结点 4.插入结点 5.删除结点 本篇只有c语言代码,具体思路讲解请看这篇博客:数据结构-线性结构-单链表 1.头插法 ...
- 室友一把王者的时间我拿捏了数据结构——顺序表(C语言版)
话不多说,先上整体动态顺序表实现的代码给大家 SeqList.h #include <stdio.h> //包含标准输入输出流的头文件 #include <assert.h> ...
- 数据结构-顺序表(C语言实现)
主函数代码(main.c) #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include "sqlist.h&quo ...
- 数据结构严蔚敏C语言版—线性表顺序存储结构(顺序表)C语言实现相关代码
数据结构严蔚敏C语言版-线性表顺序存储结构(顺序表)C语言实现相关代码 1.运行环境 2.准备工作 1)项目构建 1>新建一个SeqList项目 2>新建两个文件Sources和Heade ...
- rsa算法c语言实现_数据结构与算法之线性表-顺序表实现(C语言版本)
原文托管在Github: https://github.com/shellhub/blog/issues/52 数据结构与算法之线性表-顺序表实现(C语言版本) 前言 数据结构与算法是一个程序员必备的 ...
- C语言链表的转置算法,c语言编程集 数据结构 顺序表 点链表 数制转换 矩阵转置.doc...
c语言编程集 数据结构 顺序表 点链表 数制转换 矩阵转置 #include "stdio.h" #include "malloc.h" /*typedef s ...
- C语言/C++常见习题问答集锦[八十三]之数据结构顺序表(operand types are error: no match for “operator==“)
C语言/C++常见习题问答集锦[八十三]之数据结构顺序表{operand types are error: no match for "operator=="} 程序之美 前言 主 ...
最新文章
- 基于网格的聚类算法STING
- git 的安装和项目建立
- Java注释(Annotation)详解
- iOS制作一个雷达图,可用于多种场景(一)
- WPF实现时间轴(仿Gitee)
- OpenCV+3计算机视觉++Python语言实现+第二版pdf
- 开发者论坛一周精粹(第五十七期) 阿里云免费套餐 个人备案备注
- transform.SimilarityTransform()==>图像的相似变换=等距变换(平移+旋转变换)+均匀尺度缩放
- HDU3544 不平等博弈
- 计算机学科技术前沿:第31次中国互联网络发展状况统计报告
- 《转》武​汉​的​I​T​公​司
- 【OpenCV4 官方文档】机器学习概述
- 40个超有趣的Linux命令行彩蛋和游戏
- C++:实现量化exchangerate汇率测试实例
- Qt项目移植出现的问题(No rule to make target ‘……’, needed by ‘……’. Stop.)
- Gamma、Linear、sRGB 和Unity Color Space,你真懂了吗?
- pk 与fk mysql_什么是MySQL FK的正确命名约定?
- 开源动物园一日游!技术圈的这些“飞禽走兽”你认识多少?
- 修改SQL Server名称(@@ServerName)
- 【Ybt OJ】[数学基础 第2章] 质数与约数