顺序表作为数据结构的开端,说明这里面很多基础要学,初学者一开始都会混淆,今天我们来一步一步来建立一个完整的顺序表,可以任我们控制的顺序表,首先先定义一个顺序表

/* Note:Your choice is C IDE */
#include "stdio.h"
#define MAXSIZE 100
typedef struct /*结构体的格式*/
{
int data[MAXSIZE];
int last;
}Seqlist; /*顺序表的名称*/

定义在主函数定义一个指向这个顺序表的指针:Seqlist L*;然后定义一个函数来初始化这个顺序表,初始化即构造一个空表,将L设为指针参数,动态分配空间。初始化函数代码如下:

Seqlist *init()
{
Seqlist *L;
L=(Seqlist *)malloc(sizeof(Seqlist));
L->last=-1;
return L;
}

一切预备工作已经做好了,这个last表示此表中最后一个的位置,L->data[0]~L->data[L->last]就是所有数据的长度,现在要创建一个可以手动输入你想要的数据到顺序表里面的函数,设这个函数名为intsert();

intsert(Seqlist *L,int i,int x)
{
int j;
for(j=L->last;j>=i-1;j++)
L->data[j+1]=L->data[j];
L->data[i-1]=x;
L->last++;
return 1;
}

如果你想要输入8个数据到顺序表,与主函数联合起来,代码如下:

/* Note:Your choice is C IDE */
#include "stdio.h"
#define MAXSIZE 100
typedef struct
{
int data[MAXSIZE];
int last;
}Seqlist;
Seqlist *init();
insert(Seqlist *L,int i,int x);
main()
{
int x,i;
Seqlist *L;
L=init();
for(i=1;i<=8;i++)
{
scanf("%d",&x);
insert(L,i,x);
}
printf("写入成功!");
}
insert(Seqlist *L,int i,int x)
{
int j;
for(j=L->last;j>=i-1;j++)
L->data[j+1]=L->data[j];
L->data[i-1]=x;
L->last++; }
Seqlist *init()
{
Seqlist *L;
L=(Seqlist *)malloc(sizeof(Seqlist));
L->last=-1;
return L;
}

我们可以输入,但是不知道有没有输入成功,可以写个输出的函数:

void print(Seqlist *L)/*输出函数*/
{
int i;
if(L->last==-1)
printf("null!!");
else
{
for(i=0;i<=L->last;i++)
printf("| %d",L->data[i]);
}

同样的还有删除顺序表任意元素的函数:

int Delete(Seqlist *L,int i)
{
int j;
if(i<1||i>L->last+1)
{
printf("不存在第i个元素!");
return 0;
}
for(j=i;j<=L->last;j++)
L->data[j-1]=L->data[j];
L->last--;
}

查看任意元素的位置并返回位置:

Location(Seqlist *L,int x)
{
int i=0;
while(i<=L->last&&L->data[i]!=x)
i++;
if(i++>L->last)
return -1;
else
return i;
}

选择在哪个位置增加函数并不破坏顺序表:

add(Seqlist *L,int x,int i)
{
int j;
if(i>L->last+1)
printf("超出范围!");
else
for(j=L->last;j>=i-1;j--)
L->data[j+1]=L->data[j];
L->data[i-1]=x;
}

在某个位置修改元素,当然你得输入你想修改的位置和新元素:

int change(Seqlist *L,int a,int b)
{
L->data[a-1]=b;
}

这么多函数连用在一起就是一个完整的顺序表了,这里我用一个比较直观的方式体现出顺序表,把它设计成一个这样:aaarticlea/png;base64,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" alt="" />,并且当你按1你就可以输入你想增加的元素,按5就可以打印出顺序表。

代码如下:

  1 /* Note:Your choice is C IDE */
2 #include "stdio.h"
3 #define MAXSIZE 100
4 typedef struct
5 {
6 int data[MAXSIZE];
7 int last;
8 }Seqlist;
9 Seqlist *init();
10 void print(Seqlist *L);
11 insert(Seqlist *L,int i,int x);
12 int Delete(Seqlist *L,int i);
13 void showMainWindows();
14 int change(Seqlist *L,int a,int b);
15 Location(Seqlist *L,int x);
16 add(Seqlist *L,int x,int i);
17 function(int x);
18 main()
19 {
20 int x,i;
21 Seqlist *L;
22 L=init();
23 printf("首先你得先输入8个数据!\n");
24 for(i=1;i<9;i++)
25 {
26 scanf("%d",&x);
27 insert(L,i,x);
28 }
29 system("cls");
30 printf("写入成功,请继续使用顺序表!");
31 showMainWindows();
32
33 while(1)
34 {
35 int num;
36 scanf("%d",&num);
37 function(num);
38 if(num==1)
39 {
40 int a,b;
41 scanf("%d,%d",&a,&b);
42 add(L,a,b);
43 }
44 else
45 if(num==2)
46 {
47 int a,b;
48 scanf("%d,%d",&a,&b);
49 change(L,a,b);
50 }
51 else
52 if(num==3)
53 {
54 int de;
55 scanf("%d",&de);
56 Delete(L,de);
57 }
58 else
59 if(num==4)
60 {
61 int y;
62 scanf("%d",&y);
63 printf("此元素在第%d",Location(L,y));
64 }
65 else
66 if(num==5)
67 print(L);
68 if(num==0)
69 break;
70 }
71
72 }
73 Seqlist *init()
74 {
75 Seqlist *L;
76 L=(Seqlist *)malloc(sizeof(Seqlist));
77 L->last=-1;
78 return L;
79 }
80 void print(Seqlist *L)
81 {
82 int i;
83 if(L->last==-1)
84 printf("null!!");
85 else
86 {
87 for(i=0;i<=L->last;i++)
88 printf("| %d ",L->data[i]);
89 printf("请继续输入0~5之间的数:\n");
90 }
91 }
92 insert(Seqlist *L,int i,int x)
93 {
94 int j;
95 for(j=L->last;j>=i-1;j++)
96 L->data[j+1]=L->data[j];
97 L->data[i-1]=x;
98 L->last++;
99
100 }
101 int Delete(Seqlist *L,int i)
102 {
103 int j;
104 if(i<1||i>L->last+1)
105 {
106 printf("不存在第i个元素!\n");
107 return 0;
108 }
109 for(j=i;j<=L->last;j++)
110 L->data[j-1]=L->data[j];
111 L->last--;
112 printf("删除成功,查看请按5!\n");
113 }
114 void showMainWindows()
115 {
116 printf("\n\n\t+------------------------------------------------------+\n");
117 printf("\t| 顺序表练习 |\n");
118 printf("\t+------------------------------------------------------+\n");
119 printf("\t|------------------- 1.增 加 -----------------------|\n");
120 printf("\t|------------------- 2.修 改 -----------------------|\n");
121 printf("\t|------------------- 3.删 除 -----------------------|\n");
122 printf("\t|------------------- 4.查 找 -----------------------|\n");
123 printf("\t|------------------- 5.打 印 表-----------------------|\n");
124 printf("\t|------------------- 0.退出系统 -----------------------|\n");
125 printf("\t+------------------------------------------------------+\n");
126 printf("\t| 请输入您的选择(0-5) |\n");
127 printf("\t+------------------------------------------------------+\n");
128 printf("\n\n");
129 }
130 int change(Seqlist *L,int a,int b)
131 {
132 L->data[a-1]=b;
133 printf("修改成功,查看请按5!\n");
134 }
135 Location(Seqlist *L,int x)
136 {
137 int i=0;
138 while(i<=L->last&&L->data[i]!=x)
139 i++;
140 if(i++>L->last)
141 return -1;
142 else
143 return i;
144 }
145 add(Seqlist *L,int x,int i)
146 {
147 int j;
148 if(i>L->last+1)
149 printf("超出范围!或格式不对!请你继续输入0~5之间的数!\n");
150 else
151 for(j=L->last;j>=i-1;j--)
152 L->data[j+1]=L->data[j];
153 L->data[i-1]=x;
154 }
155 function(int x)
156 {
157 switch(x)
158 {
159 case 1:printf("请输入你要增加的元素和位置:");
160 break;
161 case 2:printf("请输入你要修改元素的位置和新元素:");
162 break;
163 case 3:printf("请输入你要删除的元素位置:");
164 break;
165 case 4:printf("请输入你要查找的元素并返回其位置:");
166 break;
167 case 5:printf(" 打印出顺序表:");
168 }
169 }

这就是我自己写的一个比较完整的顺序表,当然这里面都是int类型,比较简单而且容易理解。

C:数据结构与算法之顺序表的更多相关文章

  1. python基础下的数据结构与算法之顺序表

    一.什么是顺序表: 线性表的两种基本的实现模型: 1.将表中元素顺序地存放在一大块连续的存储区里,这样实现的表称为顺序表(或连续表).在这种实现中,元素间的顺序关系由它们的存储顺序自然表示. 2.将表 ...

  2. 数据结构与算法之顺序表C语言实现

    顺序表等相关概念请自行查阅资料,这里主要是实现. 注: 1.顺序表C语言实现: 2.按较简单的方式实现,主要帮助理解,可在此基础上修改,更加完善: 3.提供几个简单函数,可自行添加功能: 4.可用C+ ...

  3. Java数据结构和算法 - 哈希表

    Q: 如何快速地存取员工的信息? A: 假设现在要写一个程序,存取一个公司的员工记录,这个小公司大约有1000个员工,每个员工记录需要1024个字节的存储空间,因此整个数据库的大小约为1MB.一般的计 ...

  4. 数据结构与算法(c++)——跳跃表(skip list)

    今天要介绍一个这样的数据结构: 单向链接 有序保存 支持添加.删除和检索操作 链表的元素查询接近线性时间 ——跳跃表 Skip List 一.普通链表 对于普通链接来说,越靠前的节点检索的时间花费越低 ...

  5. 【数据结构与算法】线性表操作(C++)

    #include <stdio.h> #define maxSize 100 //定义整型常量maxSize值为100 /*顺序表的结构体定义*/ typedef struct SqLis ...

  6. 《数据结构》2.2顺序表(sequence list)

    //顺序表节点的定义 typedef struct { datatype data[MAXSIZE]; //数组容量的上限 int len; //记录最后一个元素的位置,相当于一个指针,表空时len= ...

  7. Javascript数据结构与算法--队列(顺序队列、优先队列、循环队列)的实现与用法

    前言 队列和栈非常类似,前面已经讲过了栈的实现与用法,现在我们来说说队列. 队列介绍 队列遵循FIFO(First In First Out,先进先出)原则的一组有序的项. 队列是一种特殊的线性表,特 ...

  8. 数据结构C++实现代码-顺序表

    参考:https://blog.csdn.net/ebowtang/article/details/43094041 //seqList.h// //包含顺序表中的声明// #include<i ...

  9. 数据结构与算法之顺序栈C语言实现

    顺序栈是一种特殊的顺序表,主要操作是入栈和出栈.将顺序表加一些特定限制,就成了顺序栈. 注: 1.顺序栈C语言实现: 2.按较简单的方式实现,主要帮助理解,可在此基础上修改,更加完善: 3.提供几个简 ...

随机推荐

  1. memcached内存管理

    前言 memcached默认情况下采用了名为Slab Allocator的机制来管理内存.在该机制出现以前,内存的分配是通过对所有记录简单地进行malloc和free来进行的.但是,这种方式会导致内存 ...

  2. Less 的使用方法

    Less 的使用方法 Less 可以直接在浏览器端运行(支持IE6+.Webkit.Firefox),也可以借助Node.js或者Rhino在服务端运行. Less是一种动态语言,无论是在浏览器端,还 ...

  3. php中foreach中使用&的办法

    刚开始在使用foreach时候一直不理解为什么要使用& 后来发现在给一个数组里面添加数据时候很好用 <?phpheader("Content-Type:text/html;ch ...

  4. openvpn技术实现客户端直接访问远程机器中docker内容器的实现与原理

    传统开发中如果要从开发机中访问服务器中的docker中的服务可能可能需要如下方案: 利用docker run的-p属性直接映射端口到服务器中 优点:客户端直接访问服务器就可以访问到docker容器. ...

  5. 算法提高 9-3摩尔斯电码 map

    算法提高 9-3摩尔斯电码 时间限制:1.0s   内存限制:256.0MB     问题描述 摩尔斯电码破译.类似于乔林教材第213页的例6.5,要求输入摩尔斯码,返回英文.请不要使用"z ...

  6. CCF-201403-2-窗口

    问题描述 试题编号: 201403-2 试题名称: 窗口 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 在某图形操作系统中,有 N 个窗口,每个窗口都是一个两边与坐标轴分别平 ...

  7. 深港澳大湾区第三次.NET技术交流会圆满成功

    2017年12月10日,一场以云.devops.微服务.容器是现在这个发展阶段的软件形态, 本次活动我们围绕这些话题介绍.NET生态下的发展本地社区活动,这次活动还得到如鹏网杨中科老师的大力支持开通网 ...

  8. 图片布局css

    对于平时项目开发中,经常要展示图片.什么水平居中显示,垂直居中显示,水平或垂直居中显示...我们的发际线就是这样往后退的. 接下来要讲的就是对于各种图片布局的css实现(这里针对的是img标签的不会使 ...

  9. 【tyvj P4879】骰子游戏

    http://www.tyvj.cn/p/4879 首先,投一个骰子,每个数字出现的概率都是一样的.也就是不算小A的话,n个人投出x个骰子需要的次数和点数无关. 计数问题考虑dp,令f(i,j)为前i ...

  10. nginx利用反向代理调试后台接口

    1.location 支持配置项目的绝对路径 2.假设我们的后台API地址是以API开头,location ^~ /api/ 代表nginx将会拦截请求地址中包含"/api/"字样 ...