c语言顺序表的例子,本文实例讲述了C语言实现的顺序表功能。分享给大家供大家参考,具体如下:seqlist.h#ifndef __SEQLIST_H__#define __...
本文实例讲述了C语言实现的顺序表功能。分享给大家供大家参考,具体如下:
seqlist.h
#ifndef __SEQLIST_H__
#define __SEQLIST_H__
#include
#include
#include
#define SEQLIST_INIT_SIZE 8
#define INC_SIZE 3 //空间增量的大小
typedef int ElemType;
typedef struct Seqlist {
ElemType *base;
int capacity; //顺序表容量
int size; //表的大小
}Seqlist;
bool Inc(Seqlist *list);//增加顺序表的容量
void InitSeqlist(Seqlist *list); //初始化顺序表
void push_back(Seqlist *list, ElemType x); //在顺序表的末尾插入元素
void push_front(Seqlist *list, ElemType x); //在顺序表的头部插入元素
void show_list(Seqlist *list); //显示顺序表中的元素
void pop_back(Seqlist *list); //删除顺序表最后一个元素
void pop_front(Seqlist *list); //删除顺序表第一个元素
void insert_pos(Seqlist *list, int pos, ElemType x);//在顺序表的选定位置上插入数据
int find(Seqlist *list, ElemType key); //在顺序表中查找元素key的下标
int length(Seqlist *list);//求顺序表的长度
void delete_pos(Seqlist *list, int pos); //删除顺序表中特定位置的数据元素
void delete_val(Seqlist *list, int key);//删除顺序表中值为key的数据元素
void sort(Seqlist *list);//冒泡排序
void reverse(Seqlist *list);//逆置顺序列表
void clear(Seqlist *list);//清除顺序表中的所有元素
void destroy(Seqlist *list);//摧毁顺序表
void merge(Seqlist *lt, Seqlist *la, Seqlist *lb);//合并两个顺序列表
#endif //__SEQLIST_H__
seqlist.cpp
#include"seqlist.h"
bool Inc(Seqlist *list) {
ElemType *newbase = (ElemType*)realloc(list, sizeof(ElemType)*(list->capacity + INC_SIZE)); //重新分配内存空间
if (newbase == NULL) {
printf("内存空间已满,无法再分配内存空间!n");
return false;
}
list->base = newbase;
list->capacity += INC_SIZE;
return true;
}
void InitSeqlist(Seqlist *list) {
list->base = (ElemType*)malloc(sizeof(ElemType)*SEQLIST_INIT_SIZE);
assert(list->base != NULL);
list->capacity = SEQLIST_INIT_SIZE;
list->size = 0;
}
void push_back(Seqlist *list, ElemType x) {
if (list->size >= list->capacity && !Inc(list)) { //Inc(list)用来判断增加顺序表容量是否成功,只有在失败的情况下才会进入if语句中
printf("顺序表容量已满,无法再在表尾继续插入新元素!n");
return;
}
list->base[list->size] = x;
list->size++;
}
void push_front(Seqlist *list, ElemType x) {
if (list->size >= list->capacity && !Inc(list)) {
printf("顺序表容量已满,无法再在表头插入新元素!n");
return;
}
for (int i = list->size;i > 0;i--) {
list->base[i] = list->base[i - 1];
}
list->base[0] = x;
list->size++;
}
void show_list(Seqlist *list) {
for (int i = 0;i < list->size;i++) {
printf("%d ", list->base[i]);
}
printf("n");
}
void pop_back(Seqlist *list) {
if (list->size == 0) {
printf("顺序表已空,无法再在表尾删除元素!n");
return;
}
list->size--;
}
void pop_front(Seqlist *list) {
if (list->size == 0) {
printf("顺序表已空,无法再在表头删除元素!n");
return;
}
for (int i = 0;i < list->size - 1;i++) {
list->base[i] = list->base[i + 1];
}
list->size--;
}
void insert_pos(Seqlist *list, int pos, ElemType x) {
if (pos<0 || pos>list->size) {
printf("插入位置不合法,无法插入元素!n");
return;
}
if (list->size >= list->capacity && !Inc(list)) {
printf("顺序表容量已满,无法在插入新的元素!n");
return;
}
for (int i = list->size;i > pos;i--) {
list->base[i] = list->base[i - 1];
}
list->base[pos] = x;
list->size++;
}
int find(Seqlist *list, ElemType key) {
for (int i = 0;i < list->size;i++) {
if (list->base[i] == key)
return i;
}
return -1;
}
int length(Seqlist *list) {
return list->size;
}
void delete_pos(Seqlist *list, int pos) {
if (pos < 0 || pos >= list->size) {
printf("删除位置不合法,无法删除元素!n");
return;
}
for (int i = pos;i < list->size - 1;i++) {
list->base[i] = list->base[i + 1];
}
list->size--;
}
void delete_val(Seqlist *list, int key) {
int pos = find(list, key);
if (pos == -1) {
printf("顺序表中没有这个元素!n");
return;
}
delete_pos(list, pos);
}
void sort(Seqlist *list) {
for (int i = 0;i < list->size - 1;i++) {//排序的趟数(例如5个数据需要比较4趟)
for (int j = 0;j < list->size - 1 - i;j++) {//每一趟比较中的比较次数(例如5个数据在第0趟需要比较4次)
if (list->base[j] > list->base[j + 1]) {
ElemType temp = list->base[j];
list->base[j] = list->base[j + 1];
list->base[j + 1] = temp;
}
}
}
}
void reverse(Seqlist *list) {
if (list->size == 0 || list->size == 1) return;
int low = 0, high = list->size - 1;
while (low < high) {
ElemType temp = list->base[low];
list->base[low] = list->base[high];
list->base[high] = temp;
low++;
high--;
}
}
void clear(Seqlist *list) {
list->size = 0;
}
void destroy(Seqlist *list) {
free(list->base);
list->base = NULL;
list->capacity = 0;
list->size = 0;
}
void merge(Seqlist *lt, Seqlist *la, Seqlist *lb) {
lt->capacity = la->size + lb->size;
lt->base = (ElemType*)malloc(sizeof(ElemType)*lt->capacity);
assert(lt->base != NULL);
int ia = 0, ib = 0, ic = 0;
while (ia < la->size&&ib < lb->size) {
if (la->base[ia] < lb->base[ib]) {
lt->base[ic++] = la->base[ia++];
}
else {
lt->base[ic++] = lb->base[ib++];
}
}
while (ia < la->size) {
lt->base[ic++] = la->base[ia++];
}
while (ib < lb->size) {
lt->base[ic++] = lb->base[ib++];
}
lt->size = la->size + lb->size;
show_list(lt);
}
main.cpp
#include"seqlist.h"
void main() {
Seqlist list;
InitSeqlist(&list);
ElemType item;
int pos;
int select = 1;
while (select) {
printf("*******************************************n");
printf("*[1] push_back [2] push_front *n");
printf("*[3] show_list [4] pop_back *n");
printf("*[5] pop_front [6] insert_pos *n");
printf("*[7] find [8] length *n");
printf("*[9] delete_pos [10] delete_value *n");
printf("*[11] sort [12] reverse *n");
printf("*[13] clear [14] merge *n");
printf("*[0] quit_system *n");
printf("*******************************************n");
printf("请选择:>>");
scanf("%d", &select);
if (select == 0) break;
switch (select) {
case 1:
printf("请输入要插入的数据(-1结束):>");
while (scanf("%d", &item), item != -1) {//先输入item的值,只要item不等于-1就接着循环
push_back(&list, item);
}
break;
case 2:
printf("请输入要插入的数据(-1结束):>");
while (scanf("%d", &item), item != -1) {
push_front(&list, item);
}
break;
case 3:
show_list(&list);
break;
case 4:
pop_back(&list);
break;
case 5:
pop_front(&list);
break;
case 6:
printf("请输入要插入的数据:>");
scanf("%d", &item);
printf("请输入要插入的位置:>");
scanf("%d", &pos);
insert_pos(&list, pos, item);
break;
case 7:
printf("请输入要查找的数据:>");
scanf("%d", &item);
pos = find(&list, item);
if (pos == -1)
printf("查找的数据元素不在顺序表中!n");
else
printf("查找的数据元素在顺序表中的下标位置为%dn", pos);
break;
case 8:
printf("顺序表的长度为%dn", length(&list));
break;
case 9:
printf("请输入要删除数据在顺序表中的下标位置:>");
scanf("%d", &pos);
delete_pos(&list, pos);
break;
case 10:
printf("请输入要删除数据的值:>");
scanf("%d", &item);
delete_val(&list, item);
break;
case 11:
sort(&list);
break;
case 12:
reverse(&list);
break;
case 13:
clear(&list);
break;
case 14:
Seqlist mylist, yourlist;
ElemType item1, item2;
InitSeqlist(&mylist);
InitSeqlist(&yourlist);
printf("请输入顺序表1中的元素值(-1结束):>");
while (scanf("%d", &item1), item1 != -1) {
push_back(&mylist, item1);
}
printf("请输入顺序表2中的元素值(-1结束):>");
while (scanf("%d", &item2), item2 != -1) {
push_back(&yourlist, item2);
}
merge(&list, &mylist, &yourlist);
destroy(&mylist);
destroy(&yourlist);
break;
default:
printf("输入的选择错误!请重新输入!n");
break;
}
}
destroy(&list);
}
希望本文所述对大家C语言程序设计有所帮助。
c语言顺序表的例子,本文实例讲述了C语言实现的顺序表功能。分享给大家供大家参考,具体如下:seqlist.h#ifndef __SEQLIST_H__#define __...相关推荐
- php两个字符串公共,C++_C语言求两个字符串的最长公共子串,本文实例讲述了C语言求两个字 - phpStudy...
C语言求两个字符串的最长公共子串 本文实例讲述了C语言求两个字符串的最长公共子串的方法.分享给大家供大家参考.具体实现方法如下: #include "stdio.h" #inclu ...
- 寻找某个数c语言,C++_C语言实现两个递减数列中寻找某一个数,本文实例讲述了C语言实现两个 - phpStudy...
C语言实现两个递减数列中寻找某一个数 本文实例讲述了C语言实现两个递减数列中寻找某一个数的方法,分享给大家供大家参考之用.具体方法如下: 通常来说这道题算二分查找法中非常有难度的一题了. 题目如下: ...
- php java执行linux_java_java执行Linux命令的方法,本文实例讲述了java执行Linux命 - phpStudy...
java执行Linux命令的方法 本文实例讲述了java执行Linux命令的方法.分享给大家供大家参考.具体实现方法如下: public class StreamGobbler extends Thr ...
- 绘制矩形php,PHP_php绘制一个矩形的方法,本文实例讲述了php绘制一个矩 - phpStudy...
php绘制一个矩形的方法 本文实例讲述了php绘制一个矩形的方法.分享给大家供大家参考.具体实现方法如下: //1.创建画布 $im = imagecreatetruecolor(300,200);/ ...
- php值比较大小,PHP_PHP浮点比较大小的方法,本文实例讲述了PHP浮点比较大 - phpStudy...
PHP浮点比较大小的方法 本文实例讲述了PHP浮点比较大小的方法.分享给大家供大家参考,具体如下: /** * 浮点数一般是不能用来比较大小的,但是我们可以用一种变通的的方式 * 用var_dump输 ...
- w3cschool php 调整图片尺寸,PHP_php修改上传图片尺寸的方法,本文实例讲述了php修改上传图 - phpStudy...
php修改上传图片尺寸的方法 本文实例讲述了php修改上传图片尺寸的方法.分享给大家供大家参考.具体实现方法如下: // This is the temporary file created by P ...
- php get 分页,PHP_codeigniter实现get分页的方法,本文实例讲述了codeigniter实现ge - phpStudy...
codeigniter实现get分页的方法 本文实例讲述了codeigniter实现get分页的方法.分享给大家供大家参考.具体实现方法如下: public function project_sear ...
- php记录页面停留时间,PHP_PHP记录页面停留时间的方法,本文实例讲述了PHP记录页面停 - phpStudy...
PHP记录页面停留时间的方法 本文实例讲述了PHP记录页面停留时间的方法.分享给大家供大家参考,具体如下: 首先在要监控的页面添加JS如下 var dt1 = new Date(); window.o ...
- php连接ftp实例,PHP_php建立Ftp连接的方法,本文实例讲述了php建立Ftp连接 - phpStudy...
php建立Ftp连接的方法 本文实例讲述了php建立Ftp连接的方法.分享给大家供大家参考.具体分析如下: 今天看了下ftp函数,总结一下: FTP相关函数: ftp_connect(host,par ...
最新文章
- 简单理解mysql事务_如何理解数据库事务中的一致性的概念?
- 实用的HTML5的上传图片方法
- 【牛客 - 370A】签到题(线段树扫描线 或 STLset)(求线段并)
- python整数类型在每一台计算机上的取值范围是一样的_人工智能第一章:Python语言基础...
- 的计时器设置_如何选择最适合自己的计时器?
- php开发流程 restful,PhpBoot 入门(一) 快速开发 RESTful 接口
- 将Vba代码转换成Php代码,将这个Excel公式转换成VBA代码(函数)
- MySQL优化之二:My SQL Server性能优化
- c# 执行js方法
- 我的AI之路(51)--用自己的UCF101数据集训练3D识别模型video-caffe
- ps盖印图层在哪里_ps盖印图层快捷键怎么用? ps盖印图层教程
- 计算机桌面比例怎么调,如何调整计算机显示器的比例
- Hadoop解除安全模式
- 上市公司9月23日晚间公告速递
- 2017年闰秒linux,6月30日将迎来人类迎来史上第26次闰秒可引起部分linux系统重启...
- 海尔电商峰值系统架构设计最佳实践
- 1004.选择结构习题:奇偶数判断
- 基于XCVU9P+ C6678的100G光纤的加速卡
- 大衣哥在《火火的情怀》后,和孟文豪张成军推出《新时代的农民》
- 威纶tk6070ik与台达变频器vdf-s485通讯程序 自己编写的威纶触摸屏与台达变频器的通讯
热门文章
- “容灾”和“备份”的区别?原来如此!
- ASP.NET动态创建控件之绝境求生
- [德ALL]没村往事
- redis变慢原因记录
- 【毕设记录日记】深度学习|铝型材表面缺陷视觉检测算法:相关课程、论文及公开数据集
- 【vue】页面缩放获取屏幕宽度、多个按钮根据屏幕宽度合并成一个按钮
- 抖音运营常见的6大误区,这就是你的视频点赞量低的主要原因
- 模式识别:感知器的实现
- gitkraken无法打开私有仓库的解决办法
- 【企业培训案例集】03期:北京新航城大兴机场企业培训——《项目管理第一课》