当前位置: 首页 > 编程日记 > 正文

线性表之顺序表(C语言实现)

线性表是从数据元素的逻辑结构上定义的.



这种数据元素的逻辑结构的特征如下:

1.除开第一个和最后一个元素之外.所有元素都有一个前驱元素和后继元素.

2.第一个元素无前驱元素,但有后继元素.

3.最后一个元素有前驱元素,单无后继元素.




可以抽象为如下表述:

元素1元素2元素3元素4元素5元素6


然而同一种逻辑结构在内存中却可以有两种存储方式:1.在内存中连续存储的线性表-----顺序表(如数组)

                                 2.在内存中离散存储的线性表-----链表(如单链表,双链表)



对于顺序表有多重操作:初始化,赋值,插入新值,删除值等

下面的用C代码实现顺序表及其一些常用的操作:

  1 #include<stdio.h>
  2 
  3 #define ERROR 0
  4 
  5 #define InitSize 20 //顺序表的初始大小
  6 
  7 typedef int ElemType;
  8 
  9 typedef struct{
 10     ElemType data[InitSize];
 11     int length;
 12 }sqlist;
 13 
 14 //顺序表初始化
 15 void InitList(sqlist *L)
 16 {
 17     L->length=0;
 18     return ;
 19 }
 20 
 21 //获取顺序表的长度
 22 int GetLength(sqlist *L)
 23 {
 24     return L->length;
 25 }
 26 
 27 //顺序表赋值
 28 void GiveValue(sqlist *L)
 29 {
 30     int value;
 31     int i=0;
 32     while(value!=0)
 33     {
 34         printf("Please input %d valueL-------(exit until value equal 0)\n",i+1);
 35         scanf("%d",&value);
 36         if(value!=0)
 37         {
 38             L->data[i++]=value;
 39             L->length++;
 40         }
 41     }
 42 }
 43 
 44 
 45 
 46 //获取顺序表某个位置的值
 47 ElemType GetValue(sqlist *L,int i)
 48 {
 49     ElemType e;
 50     if(i>L->length||i<1)
 51         return ERROR;
 52 
 53     int k=0;
 54     for(k=0;k<L->length;k++)
 55     {
 56         if(k==i-1)
 57         e=L->data[k];
 58     }
 59     return e;
 60 }
 61 
 62 //获取顺序表某个值的位置
 63 int GetPos(sqlist *L,ElemType value)
 64 {
 65     int pos;
 66     int judeflag=1;
 67     int i;
 68     for(i=0;i<L->length;i++)
 69     {
 70         if(L->data[i]==value)
 71         {
 72             pos=i+1;
 73             break;
 74         }
 75         judeflag++;
 76     }
 77 
 78     if(judeflag>=L->length)
 79         return ERROR;
 80 
 81     return pos;
 82 }
 83 
 84 //在顺序表指定位置插入新的值
 85 void InsertValue(sqlist *L,int pos,ElemType value)
 86 {
 87     if(pos<1||pos>L->length)
 88         return ERROR;
 89 
 90     int i;
 91     for(i=L->length-1;i>pos-2;i--)
 92     {
 93         L->data[i+1]=L->data[i];
 94     }
 95 
 96     L->data[pos]=value;
 97     L->length++;
 98 }
 99 
100 //在顺序表中指定位置删除值
101 void DeleteValue(sqlist *L,int pos)
102 {
103     if(pos<1||pos>L->length)
104         return ERROR;
105 
106     int i;
107     for(i=pos;i<L->length;i++)
108     {
109         L->data[i-1]=L->data[i];
110     }
111 
112     L->length--;
113 }
114 
115 //显示顺序表
116 void ShowList(sqlist *L)
117 {
118     int i;
119     printf("The List show below:\n");
120     for(i=0;i<L->length;i++)
121     {
122         printf("%d ",L->data[i]);
123     }
124 }
125 
126 
127 //主函数
128 int main()
129 {
130     sqlist L;
131     InitList(&L);//初始化顺序表
132     GiveValue(&L);//顺序表赋值
133     ShowList(&L);//显示线性表
134 
135     printf("\n\n\n\n");
136     int flag;
137     printf("******************************************************\n");
138     printf("*************choose the operation of List*************\n");
139     printf("*****************1-指定位置插入值*********************\n");
140     printf("*****************2-指定位置删除值*********************\n");
141     printf("*****************3-获取顺序表某个值得位置*************\n");
142     printf("*****************4-获取顺序表某个位置上的值*********\n");
143     printf("*****************5-获取顺序表长度*********************\n");
144     printf("*****************0-退出*******************************\n");
145     printf("******************************************************\n");
146     printf("\n\n\n");
147 
148     printf("Input the value Flag:\n");
149     scanf("%d",&flag);
150 
151     printf("flag=%d\n",flag);
152 
153     int pos,value,len;
154     switch(flag){
155     case 1:
156         {
157             printf("Please input the value and position:\n");
158             scanf("%d %d",&value,&pos);
159             printf("Insert value=%d in pos=%d\n",value,pos+1);
160             InsertValue(&L,pos,value);
161             ShowList(&L);
162             break;
163         }
164     case 2:
165         {
166             printf("Please input the position:\n");
167             scanf("%d",&pos);
168             printf("Delete value in pos=%d\n",pos);
169             DeleteValue(&L,pos);
170             ShowList(&L);
171             break;
172         }
173     case 3:
174        {
175             printf("Please input the value:\n");
176             scanf("%d",&value);
177             pos=GetPos(&L,value);
178             printf("Get value=%d's position is %d\n",value,pos);
179             ShowList(&L);
180             break;
181        }
182     case 4:
183         {
184             printf("Please input the position:\n");
185             scanf("%d",&pos);
186             value=GetValue(&L,pos);
187             printf("Get value=%d from pos=%d\n",value,pos);
188             ShowList(&L);
189             break;
190         }
191     case 5:
192         {
193             len=GetLength(&L);
194             printf("the length of List is %d\n",len);
195             ShowList(&L);
196             break;
197         }
198     case 0:
199         printf("you choose to exit\nGoodbye!\n");
200     }
201 
202     return 0;
203 }


结果图:

转载于:https://www.cnblogs.com/vpoet/p/4659722.html

相关文章:

C# POP3编程

POP3的使用很简单,所以.net没有向SMTP那样给出相应的类来控制. 废话少说,程序员最需要的使代码,:)! 1.打开VS.NET 2003. 2.新建一个WinForm Application. 3.添加命名空间 using System; using System.Drawing; using System.Collections; using System.ComponentModel; usi…

终于有人把 Python 讲清楚了!

Python因为其优越的特性广泛应用于数据分析、人工智能、Web开发、后端开发、自动化测试/运维、爬虫等领域&#xff0c;也得到了很多企业的青睐。甚至连BATZJ的技术大牛&#xff0c;都无可否认Python现在对于一个程序员发展的重要性&#xff01;最近一两年&#xff0c;我身边也有…

ASP.NET Core的配置(5):配置的同步[设计篇]

本节所谓的“配置同步”主要体现在两个方面&#xff1a;其一&#xff0c;如何监控配置源并在其变化的时候自动加载其数据&#xff0c;其目的是让应用中通过Configuration对象承载的配置与配置源的数据同步&#xff1b;其二、当Configuration对象承载的配置放生变换的时候如何向…

C#分析数据库结构,使用XSL模板自动生成代码

<html> <head> <TITLE>分析数据库结构,自动生成代码</TITLE> <meta http-equiv"Content-Type" content"text/html; charsetgb2312"> </head> <frameset cols"237,767" rows"*"> <…

超棒整理 | Python 关键字知识点大放送

作者 | 黄伟呢来源 | 数据分析与统计学之美其实前面我已经为大家总结了《Python系统关键字 “超全总结” 及其 “含义”》。今天呢&#xff0c;我将对每一个关键字列出一个例子&#xff0c;供大家参考学习和记忆。1、and、or、notand、or、not关键字都是逻辑运算符&#xff0c;…

linux下java进程占用高问题分析过程

2019独角兽企业重金招聘Python工程师标准>>> 1.用top命令找出占用cpu高的进程&#xff0c;记录下pid 2.用top -H -p pid(上面的pid)查看该进和下各线程占用cpu的情况&#xff0c;找出占用cpu高的线程pid 3.printf "%x\n" pid(上面线程的pid)打印出对应的十…

AWS - Couldformation 初探

AWS里面&#xff0c;所有的管理界面的功能都可以通过API或者JSON脚本实现&#xff0c;这样的好处是很容易的就和cloudwatch一起实现各种HA和autoscaling的应用。豆子初次使用cloudformation&#xff0c;写了一个简单JSON来创建一个EBS的Volume。我的模板定义的很简单&#xff0…

清华团队让 AI 写诗“更上一层楼”,诗歌图灵测试迷惑近半数玩家

作者 | 黄珊来源 | 数据实战派比特币外挖无穷洞&#xff0c;机神犹未休。卡中窥币影&#xff0c;池里验沙流。屡载吸金主&#xff0c;孤深渍盗求。方知区块链&#xff0c;本是古来游。这首诗歌来自一支清华团队开发的古诗 AI。它的创作才华可不仅限于此。再看下面这首诗&#x…

js中Dom元素及获取方法

DOM基础对象documentdocument.documentElement html部分document.head document.titledocument.body body部分获取元素对象方法document.getElementById(); 通过id找到对象document.getElementsByTagName(); 通过标签名找到对象并放到数组集合中document.getElementsByNam…

JavaBean简单及使用

一、JavaBean简介 JavaBean是使用Java语言开发的一个可重用的组件&#xff0c;在JSP的开发中可以使用JavaBean减少重复代码&#xff0c;使整个JSP代码的开发更简洁。JSP搭配JavaBean来使用&#xff0c;有以下的优点&#xff1a; 1.可将HTML和Java代码分离&#xff0c;这主要是为…

华为发布《AR洞察与应用实践白皮书》,提出用5G点燃AR,用AR照亮5G

[中国&#xff0c;深圳&#xff0c;2021年06月17日] 今日&#xff0c;在华为共赢未来5GAR全球峰会&#xff08;Better World Summit&#xff09;上&#xff0c;华为运营商BG首席营销官蔡孟波&#xff0c;发表了主题演讲《5GAR&#xff0c;让梦想照进现实》&#xff0c;提出用5G…

C#中虚函数,抽象,接口的简单说明

虚函数&#xff1a;由virtual声明&#xff0c;它允许在派生类中被重写&#xff0c;要重写方法&#xff0c;必须先声名为virtual public class myclass { public virtual int myint() { 函数体&#xff1b;} } class myclass1:myclass { public override int myint() { 函数体1&…

【开源】博客园文章编辑器4.0版发布

源起 最近个人时间多起来了&#xff1b; 于是打算持续写一点东西&#xff1b; 前面写了两篇关于riot.js的东西&#xff1b; 被博客园的领导移出首页了&#xff1b; 原因之一是排版不整齐&#xff1b; 确实是不整齐&#xff0c;这我认&#xff0c; 然而&#xff0c;我自己可是博…

C#中Timer组件用法

Timer组件是也是一个WinForm组件了&#xff0c;和其他的WinForm组件的最大区别是:Timer组件是不可见的&#xff0c;而其他大部分的组件都是都是可见的&#xff0c;可以设计的。Timer组件也被封装在名称空间System.Windows.Forms中&#xff0c;其主要作用是当Timer组件启动后&am…

微软全球副总裁洪小文:应对数字化转型挑战,跨界共创正当时

2021年6月16日&#xff0c;以“跨界共创”为主题的第四届微软亚洲研究院创新论坛在北京举办。今年&#xff0c;大会讨论的主题围绕“跨界创新”&#xff0c;数十家来自不同行业的企业代表&#xff0c;与微软亚洲研究院的计算机科学家就跨领域融合创新、共创精神推进数字化转型、…

Away3d 骨骼动画优化

很多朋友说Away3D 的骨骼数限制在32根&#xff0c;确切的说应该是Stage3D 的限制。在 AGAL2.0之前 VC寄存器是128个&#xff0c;每个vc常量寄存器最大只能容纳4位&#xff0c;transform占用一个4*4的矩阵&#xff0c;所以如果把一个transform存进vc里面&#xff0c;需要到4个寄…

postgresql中COPY的用法

一.测试创建表&#xff1a;[postgrescacti ~]$ cat test.sql CREATE TABLE weather ( city varchar(80), temp_lo int, temp_hi int, prcp real,date date);二.导入test.sql文件生成表&#xff1a;testdb01> \i test.sql***(Single step mode: verify command)*************…

C#中虚方法重载

在&#xff23;&#xff03;中&#xff0c;进行虚方法的重载有些体会&#xff0c;现与大家分享。 首先请大家看看下面的例子&#xff0c; using System; abstract public class contact { public virtual string prinf() { return ("这是虚方法"); } } publi…

Unity 4.x游戏开发技巧集锦(内部资料)

2019独角兽企业重金招聘Python工程师标准>>> Unity 4.x游戏开发技巧集锦&#xff08;内部资料&#xff09;淘宝书店地址&#xff1a;http://item.taobao.com/item.htm?spma1z10.3.w4002-6661947338.36.FdOZqM&id40302732808试读样章下载地址&#xff1a;http:/…

百度CTO王海峰阐释AI融合创新,降低门槛,按下产业智能化加速键

6月17-18日&#xff0c;第五届未来网络发展大会在南京隆重开幕。大会由中华人民共和国科学技术部、中国工程院、中国科学技术协会、江苏省人民政府指导&#xff0c;南京市人民政府主办&#xff0c;以“努力成为世界主要科学中心和创新高地的使命担当”为主线&#xff0c;邀请国…

[LeetCode系列]最大连续子列递归求解分析

本文部分参考Discuss: LeetCode. 步骤1. 选择数组的中间元素. 最大子序列有两种可能: 包含此元素/不包含. 步骤2. 步骤2.1 如果最大子序列不包含中间元素, 就对左右子序列进行步骤1. 步骤2.2 如果最大子序列包含, 则结果很简单, 就是左子列的最大后缀子列(即包含左子列最后一个…

C#中的多线程编程

C#是.Net平台的通用开发工具&#xff0c;它能够建造所有的.Net应用。在.Net中所有线程都运行在应用程序域(AppDomain)中&#xff0c;这也许让你想到Win32进程&#xff0c;实际上它们还是有很大的不同。应用程序域提供了一种安全而通用的处理单元&#xff0c;公共语言运行库可使…

关于机器学习,不可不知的15个概念

‍‍作者&#xff1a;布奇昆托&#xff08;Butch Quinto&#xff09;来源&#xff1a;大数据DT&#xff08;ID&#xff1a;hzdashuju&#xff09;有监督学习有监督学习是利用训练数据集进行预测的机器学习任务。有监督学习可以分为分类和回归。回归用于预测“价格”“温度”或“…

常用API(Object、String、StringBuffer、用户登陆注册)

常用API 今日内容介绍 u Object u String u StringBuilder 第1章 Java的API及Object类 在以前的学习过程中&#xff0c;我们都在学习对象基本特征、对象的使用以及对象的关系。接下来我们开始使用对象做事情&#xff0c;那么在使用对象做事情之前&#xff0c;我们要学习一些API…

WMI列出磁盘配额

using System; using System.Management; namespace DiskQuota { /// <summary> /// Class1 的摘要说明。 /// </summary> class Class1 { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main(string[] args) { try…

VS2013 编译使用 stlport

1. 下载stlport. 下载地址:http://sourceforge.net/projects/stlport/ 2. 解压到一个目录下面, 我的是解压到D:\project_kuku\program\library\STLport-5.2.1 3. 打开vs2013的命令行工具, 在目录:C:\Program Files\Microsoft Visual Studio 12.0\Common7\Tools\Shortcuts\ 下…

盛夏海边,用Python分析青岛哪些景点性价比高

作者 | 志斌来源 | 志斌的python笔记头图 | 付费下载于 IC Photo在经过几年的热潮之后&#xff0c;人工智能AI算法已经在各行各业广泛使用了。例如在工业制造中&#xff0c;利用人工智能监测仪器仪表、人员的违规与高危行为&#xff1b;利用图形AI算法进行材料质检&#xff1b;…

EnterLib PIAB又一个BUG?

在《这是EnterLib PIAB的BUG吗&#xff1f;》一文中我们讨论了PIAB关于抽象基类的BUG&#xff0c;今天又发现了一个新的问题。问题的起因源于《IoCAOP的简单实现》这篇文章&#xff0c;因为文中给出的解决方案仅仅支持构造器注入&#xff08;Constructor Injection&#xff09;…

【SQL Server】系统学习之一:表表达式

本节讨论的相关内容包括&#xff1a;视图、派生表、CTE、内联表值函数 场景&#xff1a;如果要查询一组数据&#xff08;例如聚合数据&#xff0c;也就是几个表聚合在一起的数据&#xff09;&#xff0c;这些数据并未在数据库中以表的形式存在。 1、视图&#xff1a;通常用来分…

C语言中字符数组和字符串指针分析

写下面的测试程序&#xff1a;#include <stdio.h> int main(int argc, char *argv[]){char day[15] "abcdefghijklmn"; char* strTmp "opqrstuvwxyz";printf("&day is %x\n",&day); printf("&day[0] is %x\n",&…