博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
顺序表C版
阅读量:6070 次
发布时间:2019-06-20

本文共 3479 字,大约阅读时间需要 11 分钟。

hot3.png

#include 
#include
#define INIT_SIZE 100 //初始容量#define INCREMENT_SIZE 10 //扩容单位typedef int ELEM_TYPE; //声明数据元素类型//或者:#define int datatype;//声明顺序表数据类型typedef struct SEQ_LIST{ ELEM_TYPE *data; //即 int* data; int cap; //顺序表的容量 int len; //顺序表实际存储的元素的个数 } SEQ_LIST;//顺序表支持的操作//创建(初始化)顺序表void InitList(SEQ_LIST* sl){ sl->data=(ELEM_TYPE*)malloc(INIT_SIZE); //根据初始容量来申请数据空间 sl->cap=INIT_SIZE; //初始容量 sl->len=0; //初始长度为0}//销毁顺序表void DestroyList(SEQ_LIST* sl){ free(sl->data); //释放数据空间 sl->cap=0; //容量清0 sl->len=0; //长度清0}//清空顺序表void ClearList(SEQ_LIST* sl){ sl->len=0;}//插入元素//在尾部插入void Append(SEQ_LIST* sl, ELEM_TYPE data){ //如果当前顺序表已满,要扩容 if(sl->len>=sl->cap) { sl->data=realloc(sl->data,sl->cap+INCREMENT_SIZE); sl->cap+=INCREMENT_SIZE; } sl->data[sl->len]=data; sl->len++;}//在指定位置插入void Insert(SEQ_LIST* sl, int pos, ELEM_TYPE data){ //如果当前顺序表已满,要扩容 if(sl->len>=sl->cap) { sl->data=realloc(sl->data,sl->cap+INCREMENT_SIZE); sl->cap+=INCREMENT_SIZE; } int i; for(i=sl->len-1;i>=pos;i--) sl->data[i+1]=sl->data[i]; sl->data[pos]=data; sl->len++;}//删除数据元素//根据数据元素的值删除int DeleteByData(SEQ_LIST* sl, ELEM_TYPE data){ int i; for(i=0;i
len;i++) { if(sl->data[i]==data) break; } if(i==sl->len) return 0; //删除失败返回0 for(;i
len-1;i++) sl->data[i]=sl->data[i+1]; sl->len--;}//根据数据元素的索引(位置)删除int DeleteByIndex(SEQ_LIST* sl, int pos){ if(pos<0 || pos>=sl->len) return 0; int i; for(i=pos;i
len-1;i++) sl->data[i]=sl->data[i+1]; sl->len--;}//修改指定数据元素的值,修改成功返回1,失败返回0//根据数据元素的值去修改int UpdateByData(SEQ_LIST* sl, ELEM_TYPE old_data, ELEM_TYPE new_data){ int i; for(i=0;i
len;i++) { if(sl->data[i] == old_data) break; } if(i == sl->len) return 0; sl->data[i] = new_data;}//根据数据元素的索引去修改int UpdateByIndex(SEQ_LIST* sl, int pos, ELEM_TYPE new_data){ if(pos<0 || pos>=sl->len) return 0; int i; i = pos; sl->data[i] = new_data;}//遍历顺序表,即访问它的所有数据元素//visit为访问回调函数,如果它的返回值为0,表示不继续往下遍历,即停止遍历,否则继续往下遍历void Traverse(SEQ_LIST* sl, int(*visit)(ELEM_TYPE* data)){ int i; for(i=0;i
len;i++) { if(!visit(sl->data+i)) break;; }}int cmp(const void *a,const void *b){ return(*(int*)a-*(int*)b);}//排序void Sort(SEQ_LIST* sl, int(*cmp)(const ELEM_TYPE* a, const ELEM_TYPE* b)){ int i = 0; int a[100]; for(i=0;i
len;i++) a[i] = sl->data[i]; qsort(a,sl->len,sizeof(int),(void*)(*cmp)); for(i=0;i
len;i++) printf("%d ",a[i]); printf("\n");}//逆序void Reverse(SEQ_LIST* sl){}//获取顺序表的长度int GetLength(SEQ_LIST* sl){ return sl->len;}//判断顺序表是否为空int IsEmpty(SEQ_LIST* sl){ return !(sl->len);}//访问函数int ShowAll(ELEM_TYPE* data){ static int cnt=0; cnt++; if(cnt>=3) { cnt=0; return 0; } printf("%d ",*data); return 1;}void Show(SEQ_LIST* sl){ printf("共有%d个数据元素,分别为:\n",sl->len); int i; for(i=0;i
len;i++) { printf("%d ",sl->data[i]); } printf("\n\n");}int main(){ SEQ_LIST sl1; //sl1为一个顺序表 SEQ_LIST sl2; //sl2为一个顺序表 InitList(&sl1); InitList(&sl2); Append(&sl1,1000); Append(&sl1,1020); Append(&sl1,1011); Append(&sl1,1412); Append(&sl1,1234); Append(&sl1,1345); Append(&sl1,1456); Append(&sl1,1255); Append(&sl1,1657); Append(&sl1,6787); UpdateByData(&sl1,1000,1333); Show(&sl1); Sort(&sl1,(void*)(*cmp)); UpdateByIndex(&sl1,3,1200); Show(&sl1); return 0;}

转载于:https://my.oschina.net/HappyTeemo/blog/1558538

你可能感兴趣的文章
工作中的CAD图纸文件怎么转换成BMP格式后保存桌面?
查看>>
文件查找locate与find
查看>>
Linux内核目录结构
查看>>
Microsoft System Center 2012 Virtual Machine Manager 部署过程
查看>>
CentOS下安装Nagios
查看>>
批量删除Exchange 2010 邮件队列
查看>>
关于MyEclipse在载入CVS中的工程后,工程无法运行的解决
查看>>
ESX_4.1_命令行网络配置(vlan)
查看>>
今天终于收到51CTO的奖品了
查看>>
ubuntu 配置R语言环境
查看>>
Ngnix中的fastcgi参数性能优化和解释
查看>>
Mysql 数据库备份与恢复
查看>>
代码解密cxx
查看>>
区别:Thread.currentThread().getContextClassLoader() and Class.getClassLoader()
查看>>
centos6.5系统上安装grafana操作步骤
查看>>
待整理的每日记录
查看>>
eclipse 3.7 + subclipse1.8
查看>>
如何获取陌生服务器的IP地址
查看>>
我的友情链接
查看>>
计算机网络传输层
查看>>