数据结构之顺序表常用操作整理
来源:互联网 发布:win10磁盘优化有几遍 编辑:程序博客网 时间:2024/06/05 02:49
</pre><pre name="code" class="cpp">
</pre><pre name="code" class="cpp">#include <stdio.h>#include <stdlib.h>#define List_init_size 1000#define Listincrease 1000typedef int Element;typedef struct{ Element *elem; int length; int listsize;}Sqlist;int Initlist(Sqlist *L)//万年不变的初始化{ L->elem=(Element *)malloc(List_init_size*sizeof(Element)); if(!L->elem)exit(-1);/*此处也可以是return -1;具体return与exit区别 此处附上几条博客链接:http://blog.csdn.net/xuan_h/article/details/23935471 http://blog.csdn.net/jody1989/article/details/6821477 http://blog.csdn.net/u010046690/article/details/47105665 不喜勿喷 */ L->length=0; L->listsize=List_init_size; return 1;}int Createlist(Sqlist *L,int n)//一、为线性表输入元素{ int i; for(i=0;i<n;i++) { scanf("%d",&L->elem[i]); } L->length=n;//此处新手易忘 return 1;}int Destroylist(Sqlist *L)//二、摧毁顺序表{ free(L->elem);/*此处亦可以用(*L).elem 具体两者的区别,结构体指针变量可以用->, 而普通结构体变量则用. */ L->elem=NULL;//摧毁,简单粗暴 L->length=0; L->listsize=0; return 1;}int Clearlist(Sqlist *L)//三、只是清空表{ L->length=0;/* 此时虽说表已经清空,但是原来在表中的元素依然存在 也就是说仍然可以访问原来的那些元素,只是此时访问的话是 非法的,清空之后,键入新元素会覆盖以前的那些数据, 所以并不会影响以后数据的输入,也节省了删除这些数据的时间 */ return 1;}int Emptylist(Sqlist *L)//四、判断表是否非空{ if(L->length==0)return 1; else return 0;}int Lengthlist(Sqlist *L){//五、返回顺序表的长度,个人感觉这个函数并无卵用 return L->length;}int Getelem(Sqlist *L,int i,Element *e){//六、获取顺序表中位序为i的元素 if(i<1||i>L->length)return -1;//判断i位置是否合法 *e=(L->elem[i-1]);//用e返回也可直接return e; return 1;}/*较为重要的函数,很常用*/int Deletelist(Sqlist *L,int i,Element *e){//七、删除位序为i的元素 //i为要删除元素的位序,注意位序和数组下标的关系 int *p,*q; if((i<1)||(i>(L->length)))return -1; p=&(L->elem[i-1]);//要删除的元素 *e=*p;//将其付给e返回 q=L->elem+L->length-1;//指向最后一个元素 for(;p<q;p++) { *p=*(p+1);//移位覆盖删除 } L->length--;//此处易忘 return 1;}/*较为重要的函数,插入函数,常用*/int Insertlist(Sqlist *L,int i,Element e){//八、在位置i之前插入新元素e Element *newbase;//注意其类型 int *p,*q;//注意其类型 if(i<1||i>L->length)return -1;//判断i位置是否合法 if(L->length>=L->listsize)//当内存不足时 { newbase=(Element *)realloc(L->elem, (L->listsize+Listincrease)*sizeof(Element)); if(!L->elem)return -1;//莫忘 L->elem=newbase; L->listsize+=Listincrease;//内存增大 } q=&(L->elem[i-1]);//取要插入数位置的地址 for(p=&(L->elem[L->length-1]);p>=q;p--) { *(p+1)=*p;//往后移位空出要插入的位置 //此处注意对比删除函数中,循环条件与移动方式 } *q=e;//插入 L->length++;//莫忘长度加一 return 1;}int Display(Sqlist *L){//九、顺序表输出函数 int i; for(i=0;i<L->length;i++) { printf(i==L->length-1?"%d\n":"%d ",L->elem[i]); } return 1;}int main(){ int n; Sqlist L; while(1) { Element e; scanf("%d",&n); Initlist(&L); Createlist(&L,n); printf("输出************\n"); Display(&L); printf("删除之后************\n\n"); Deletelist(&L,3,&e); Display(&L); printf("查入之后************\n\n"); Insertlist(&L,3,e); Display(&L); printf("取某一元素输出************\n\n"); Getelem(&L,3,&e); printf("%d\n",e); printf("清空表之后************\n\n"); Clearlist(&L); printf("%d\n",L.length); printf("摧毁表之后************\n\n"); Destroylist(&L); Display(&L);//此句无效 } return 0;}span()为HTML标签,调试程序时请删除;
1 0
- 数据结构之顺序表常用操作整理
- 数据结构之顺序表操作
- 《数据结构》 顺序表常用操作代码集合
- 数据结构之顺序表的基本操作
- 数据结构之顺序表基本操作
- 数据结构之顺序表的操作
- 数据结构之顺序串(整理严蔚敏数据结构)
- 数据结构之线性表顺序存储的常用操作(转载)
- 数据结构整理_线性表之顺序表
- 数据结构之顺序结构线性表之操作
- Linux内核常用数据结构——顺序表之哈希表
- 数据结构之 顺序表
- 数据结构之顺序表
- 数据结构之顺序表
- 数据结构之顺序表
- 数据结构之顺序表
- 数据结构之顺序表
- 数据结构之顺序表
- 数据结构实验之二叉树的建立与遍历
- 栈
- HDU 5806 NanoApe Loves Sequence Ⅱ [尺取法]
- Java-小白成长日记(2016年8月6日)
- ffmpeg命令详解(三)
- 数据结构之顺序表常用操作整理
- POJ 3746 Cyclic Nacklace(KMP)
- uva562 Dividing coins(背包)
- CTR预估算法小结
- HTML源码DOM的offsetLeft,Left,clientLeft区别是什么样的?如何理解?
- 大数据DTSpark"蘑菇云"行动之 第三课:IDE开发第一个Scala程序
- 《React-Native系列》8、RN如何打离线包
- eclipse中的easy explore插件,提高开发效率
- java移位操作<<,>>,>>>