族谱网 头条 人物百科

顺序表

2017-10-16
出处:族谱网
作者:阿族小谱
浏览:557
转发:0
评论:0
存储结构/*线性表的动态分配顺序存储结构*/#defineLIST_INIT_SIZE10/*线性表存储空间的初始分配量*/#defineLIST_INCREMENT2/*线性表存储空间的分配增量*/typedefstruct{ElemType*elem;/*存储空间基址*/intlength;/*当前长度*/intlistsize;/*当前分配的存储容量(以sizeof(ElemType)为单位)*/}SqList;基本操作/*顺序表示的线性表的基本操作(12个)*/voidInitList(SqList*L)/*算法2.3*/{/*操作结果:构造一个空的顺序线性表L*/L->elem=malloc(LIST_INIT_SIZE*sizeof(ElemType));if(!L->elem)exit(OVERFLOW);/*存储分配失败*/L->length=0;/*空表长度为0*/L->...

存储结构

/* 线性表的动态分配顺序存储结构 */#define LIST_INIT_SIZE 10 /* 线性表存储空间的初始分配量 */#define LIST_INCREMENT 2 /* 线性表存储空间的分配增量 */typedefstruct{ElemType*elem;/* 存储空间基址 */intlength;/* 当前长度 */intlistsize;/* 当前分配的存储容量(以sizeof(ElemType)为单位) */}SqList;

基本操作

/* 顺序表示的线性表的基本操作(12个) */voidInitList(SqList*L)/* 算法2.3 */{/* 操作结果:构造一个空的顺序线性表L */L->elem=malloc(LIST_INIT_SIZE*sizeof(ElemType));if(!L->elem)exit(OVERFLOW);/* 存储分配失败 */L->length=0;/* 空表长度为0 */L->listsize=LIST_INIT_SIZE;/* 初始存储容量 */}voidDestroyList(SqList*L){/* 初始条件:顺序线性表L已存在。操作结果:销毁顺序线性表L */free(L->elem);L->elem=NULL;L->length=0;L->listsize=0;}voidClearList(SqList*L){/* 初始条件:顺序线性表L已存在。操作结果:将L重置为空表 */L->length=0;}StatusListEmpty(SqListL){/* 初始条件:顺序线性表L已存在。操作结果:若L为空表,则返回TRUE,否则返回FALSE */if(L.length==0)returnTRUE;elsereturnFALSE;}intListLength(SqListL){/* 初始条件:顺序线性表L已存在。操作结果:返回L中数据元素个数 */returnL.length;}StatusGetElem(SqListL,inti,ElemType*e){/* 初始条件:顺序线性表L已存在,1≤i≤ListLength(L)。操作结果:用e返回L中第i个数据元素的值 */if(iL.length)returnERROR;*e=*(L.elem+i-1);returnOK;}intLocateElem(SqListL,ElemTypee,Status(*compare)(ElemType,ElemType)){/* 初始条件:顺序线性表L已存在,compare()是数据元素判定函数(满足为1,否则为0) *//* 操作结果:返回L中第1个与e满足关系compare()的数据元素的位序。 *//* 若这样的数据元素不存在,则返回值为0。 */ElemType*p;inti=1;/* i的初值为第1个元素的位序 */p=L.elem;/* p的初值为第1个元素的存储位置 */while(i<=L.length&&!compare(*p++,e))++i;if(i<=L.length)returni;elsereturn0;}StatusPriorElem(SqListL,ElemTypecur_e,ElemType*pre_e){/* 初始条件:顺序线性表L已存在 *//* 操作结果:若cur_e是L的数据元素,且不是第一个,则用pre_e返回它的前驱, *//* 否则操作失败,pre_e无定义 */inti=2;ElemType*p=L.elem+1;while(iL.length)returnINFEASIBLE;/* 操作失败 */else{*pre_e=*--p;returnOK;}}StatusNextElem(SqListL,ElemTypecur_e,ElemType*next_e){/* 初始条件:顺序线性表L已存在 *//* 操作结果:若cur_e是L的数据元素,且不是最后一个,则用next_e返回它的后继, *//* 否则操作失败,next_e无定义 */inti=1;ElemType*p=L.elem;while(i<L.length&&*p!=cur_e){i++;p++;}if(i==L.length)returnINFEASIBLE;/* 操作失败 */else{*next_e=*++p;returnOK;}}StatusListInsert(SqList*L,inti,ElemTypee){/* 初始条件:顺序线性表L已存在,1≤i≤ListLength(L)+1 *//* 操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1 */ElemType*newbase,*q,*p;if(iL->length+1)/* i值不合法 */returnERROR;if(L->length>=L->listsize)/* 当前存储空间已满,增加分配 */{newbase=realloc(L->elem,(L->listsize+LIST_INCREMENT)*sizeof(ElemType));if(!newbase)exit(OVERFLOW);/* 存储分配失败 */L->elem=newbase;/* 新基址 */L->listsize+=LIST_INCREMENT;/* 增加存储容量 */}q=L->elem+i-1;/* q为插入位置 */for(p=L->elem+L->length-1;p>=q;--p)/* 插入位置及之后的元素右移 */*(p+1)=*p;*q=e;/* 插入e */++L->length;/* 表长增1 */returnOK;}StatusListDelete(SqList*L,inti,ElemType*e){/* 初始条件:顺序线性表L已存在,1≤i≤ListLength(L) *//* 操作结果:删除L的第i个数据元素,并用e返回其值,L的长度减1 */ElemType*p,*q;if(iL->length)/* i值不合法 */returnERROR;p=L->elem+i-1;/* p为元素的位置 */*e=*p;/* 元素的值赋给e */q=L->elem+L->length-1;/* 表尾元素的位置 */for(++p;plength--;/* 表长减1 */returnOK;}voidListTraverse(SqListL,void(*vi)(ElemType*)){/* 初始条件:顺序线性表L已存在 *//* 操作结果:依次对L的每个数据元素调用函数vi() *//* vi()的形参加"&",表明可通过调用vi()改变元素的值 */ElemType*p;inti;p=L.elem;for(i=1;i<=L.length;i++)vi(p++);printf("\n");}


免责声明:以上内容版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。感谢每一位辛勤著写的作者,感谢每一位的分享。

——— 没有了 ———
编辑:阿族小谱

更多文章

更多精彩文章
评论 {{commentTotal}} 文明上网理性发言,请遵守《新闻评论服务协议》
游客
发表评论
  • {{item.userName}} 举报

    {{item.content}}

    {{item.time}} {{item.replyListShow ? '收起' : '展开'}}评论 {{curReplyId == item.id ? '取消回复' : '回复'}}

    回复评论
加载更多评论
打赏作者
“感谢您的打赏,我会更努力的创作”
— 请选择您要打赏的金额 —
{{item.label}}
{{item.label}}
打赏成功!
“感谢您的打赏,我会更努力的创作”
返回
打赏
私信

推荐阅读

· 中国历史朝代顺序表
中国历史朝代顺序表以前我们可能以这样的方式大概记住中国历史朝代,具体的可能不是很了解,包括夏商之前我们也不是很了解。夏商与西周东周分两段春秋和战国一统秦两汉三分魏蜀吴二晋前后沿南北朝并立隋唐五代传宋元明清后皇朝至此完。中国朝代顺序表:三皇五帝、夏、商、周(西周、东周(春秋、战国))、秦、汉(西汉、东汉)、三国时期(魏、蜀、吴)、晋(西晋、东晋)、南北朝((南朝[宋、齐、梁、陈])、(北朝[北魏、东魏、西魏、北齐和北周]))、隋、唐、五代(五代(后梁、后唐、后晋、后汉与后周)十国(前蜀、后蜀、吴、南唐、吴越、闽、楚、南汉、南平(荆南)、北汉))、宋(北宋、南宋)、辽、西夏、元、明、清、中华民国、中华人民共和国。下面我们图片的形式来了解一下中国历史朝代顺序吧。中国历史朝代顺序表:
· 美国州份依加入联邦顺序排列列表
地图原13州批准宪法的顺序,然后是其他州份加入联邦的顺序美国各州的建州日期1776年-1790年1791年-1799年1800年-1819年1820年-1839年1840年-1859年1860年-1879年1880年-1899年1900年-1950年1950年-1959年表格注释^1.01.1国会在1803年2月19日承认俄亥俄州("AnacttoprovideforthedueexecutionofthelawsoftheUnitedStates,withinthestateofOhio",SeventhCongress,SessionII,ChapterVII),但是批准法案或之后的决议案都没有制定正式建州日期。在1953年8月7日,国会通过法律追溯设置俄亥俄州的建州日期为1803年3月1日,这是俄亥俄州第一届议会的召开日期。^2.02.1南北达科他州实际的建州宣言遭故意打乱,故没人知...
· 唐朝皇帝列表,唐朝历代皇帝顺序表,唐代皇帝排名姓名年号
唐朝(TangDynasty,618年—907年),是继隋朝之后的大一统王朝,共历二十一帝,享国祚二百八十九年,因皇室姓李,故又称为李唐,是公认的中国最强盛的时代之一。又因其政治、文化、制度等继承于隋朝并发扬光大,所以后世史学家常将两朝合称为隋唐。隋朝末天下群雄并起,大业十三年(617年)七月,唐国公,晋阳留守李渊在晋阳起兵,以尊隋为名打着“废昏立明,拥立代王,匡复隋室”旗号起兵,每战必克,十一月就攻下了首都长安,遥尊隋炀帝为太上皇,立其13岁的孙子杨侑为帝(恭帝),改元“义宁”,被册封为唐王,大丞相,把握了朝政。义宁二年(618年),隋恭帝杨侑“禅让”帝位后李渊便以“唐”为国号称帝。因国君姓李,故又称李唐,尊称为大唐。其子唐太宗李世民继位后开创“贞观之治”。唐高宗李治承贞观遗风开创“永徽之治”。690年,武则天以周代唐,定都洛阳,史称武周。神龙革命后恢复大唐国号,继续李氏江山。唐玄宗即位...
· 清朝十三位皇帝顺序表,清朝一共多少位皇帝分别都是谁
最近很多小伙伴在问这个清朝的十三位皇帝顺序表,也就是想问这十三位皇帝的在位时间还有名字年号等等,这是一个非常值得学习的知识点,如果对这个比较感兴趣的话,可以看看下面的文章,期待大家加入哦!首先要给大家说清楚的一件事情是,清朝在位的皇帝只有十二位,并不是十三位,十三位应该是加上了慈禧,但是慈禧只是单纯的垂帘听政,并不能说成是皇帝了。1、清朝十三位皇帝顺序表1.1、爱新觉罗·努尔哈赤,庙号—清太祖,年号—天命,在位时间1616年~1626年(总共10年)1.2、爱新觉罗·皇太极,庙号—清太宗,年号—天聪与崇德,1626年~1636年(总共10年)1.3、爱新觉罗·福临,庙号—清世祖,年号—顺治,1644年~1661年(总共17年)1.4、爱新觉罗·玄烨,庙号—清圣祖,年号—康熙,1661年~1722年(总共61年)1.5、爱新觉罗·胤禛,庙号—清世宗,年号—雍正,1722年~1735年(总共1...
· 5000年历史顺序
5000年历史顺序说到中国的5000年历史顺序,其实说难也难,说不难,也是真滴难,但是如果自己掌握了,那也没有什么大的问题,最近很多人也说了,想再学学看看这个5000年历史顺序,顺便计一计,有对这个感兴趣的网友别错过了呀!1、远古神化时期约10000年前-4000年前伏羲约8000年前女娲约6000年前燧人约5500年前有巢约5300年前神农约5000年前夸父约4800年前蚩尤约4500年前2、五帝时期约4300年前-4000年前黄帝约4300年前颛顼约4200年前帝喾约4150年前唐尧约4060年前虞舜约4000年前3、奴隶制时期约公元前21世纪-公元前5世纪夏约公元前2000年(前21世纪)商公元前1562-前1066周公元前1066-前770(周实际已灭亡)春秋(先后霸主:齐,宋,楚,晋,秦。春秋五霸)公元前770战国(齐,楚,偃,韩,赵,魏,秦)公元前4764、原始理想化封建制度时...

关于我们

关注族谱网 微信公众号,每日及时查看相关推荐,订阅互动等。

APP下载

下载族谱APP 微信公众号,每日及时查看
扫一扫添加客服微信