版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据结构代码.数据结构代码全文共7页,当前为第1页。第二章线性表数据结构代码全文共7页,当前为第1页。1.线性表/*******实现了线性表的定义,创建空的线性表,线性表元素的输入,输出操作,对线性表进行增删的操作以与对两个顺序线性表按照顺序进行合并*******/#include<stdio.h>#include<malloc.h>#include<stdlib.h>#defineLIST_INIT_SIZE100//定义线性表的长度#defineINCREMENT2//定义存储空间的分配增量typedefstruct{int*elem;//线性表存储空间的首地址intlength;//线性表的长度intlistsize;//现性表的大小}Sqlist;voidinit(Sqlist&L){//初始化一个线性表L.elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int));if(!L.elem)exit(0);L.length=0;L.listsize= LIST_INIT_SIZE;return;}voidlistinsert(Sqlist&L,inte,inti){//在第i个元素之前插入数据eint*newbase=NULL;//创建新的起始地址int*q;int*p; if(i<1||i>L.length+1)//插入元素失败exit(0); if(L.length>=L.listsize)//存储空间不足,重新分配空间 {newbase=(int*)realloc(L.elem,(LIST_INIT_SIZE+INCREMENT)*sizeof(int));if(!newbase)exit(0);L.elem=newbase;L.listsize+=INCREMENT; }数据结构代码全文共7页,当前为第2页。 q=&L.elem[i-1];//找到第i个元素数据结构代码全文共7页,当前为第2页。 for(p=&L.elem[L.length-1];p>=q;p--)*(p+1)=*p;//把第i个元素与之后的每一个元素向后移动一位 *q=e;//插入目标元素L.length++;return;}voidlistdelete(Sqlist&L,inti,int&e){//删除第i个元素,返回被删除的元素的值int*p;int*q;if(i<1||i>L.length)exit(0); e=L.elem[i-1]; q=&L.elem[L.length-1]; for(p=&L.elem[i];p<q;p++)*p=*(p+1);//被删除元素后面的每一个元素的位置向前移动一位L.length--;return;}voidlistinput(Sqlist&L,inti){//输入i个元素intj=0;if(i>L.listsize)exit(0);for(j=0;j<i;j++){scanf("%d",&L.elem[j]);L.length++; }}voidlistput(SqlistL){//输出线性表中全部的元素inti=0;if(L.length<=0)exit(0);for(i=0;i<L.length;i++)printf("%d",L.elem[i]);printf("\n");return;}voidmergin(SqlistLa,SqlistLb,Sqlist&Lc){int*pa=La.elem;数据结构代码全文共7页,当前为第3页。int*pb=Lb.elem;数据结构代码全文共7页,当前为第3页。int*pa_last=&La.elem[La.length-1];int*pb_last=&Lb.elem[Lb.length-1];int*pc;inti=0;init(Lc);pc=Lc.elem; while(pa<=pa_last&&pb<=pb_last){//这里以与下面的判断条件一定要指针指出去才能算把数据放大Lc中去了if(*pa<=*pb){Lc.elem[i]=*pa;pa++; }else{Lc.elem[i]=*pb;pb++; }i++;Lc.length++; }while(pa<=pa_last){Lc.elem[i]=*pa;pa++;i++;Lc.length++;}while(pb<=pb_last){Lc.elem[i]=*pb;pb++;i++;Lc.length++;}}/*intmain(){//测试线性表的增删操作inte;SqlistL;init(L);//创建一个新的空的线性表printf("请输入5个数\n");listinput(L,5);//输入5个整数printf("输入的5个整数为:");listput(L);printf("在第2个数之前插入整数99");listinsert(L,99,2);printf("\n输出线性表中的数据");listput(L);printf("删除线性表中第4位元素");listdelete(L,4,e);printf("删除的数为:%d\n",e);printf("输出线性表中的数据");listput(L);return0;数据结构代码全文共7页,当前为第4页。}数据结构代码全文共7页,当前为第4页。*/intmain(){//测试两个顺序线性表的合并操作printf("创建两个线性表");SqlistLa,Lb,Lc;init(La);init(Lb);printf("输入线性表1中的数据,5个整数\n");listinput(La,5);printf("输入线性表2中的数据,5个整数\n");listinput(Lb,5);mergin(La,Lb,Lc);printf("\n输出合并和线性表3中的数据\n");listput(Lc);return0;}线性链表#include<stdio.h>#include<stdlib.h>#include<malloc.h>typedefstructLNode{//定义一种数据类型,它是由一个整数数据和一个指向这中数据的指针组成的intdata;//存放整形数据structLNode*next;//指向下一个数据的指针}*linklist;//创建一个有n个数据的数据链表〔带头结点,且是向前插入,后面数据一个个往前输〕voidcreatelinklist1(linklist&L,intn){inti;linklistp; L=(linklist)malloc(sizeof(LNode));//创建一个头结点〔线性表的空间不是连在一起的,不能一起申请完了,只能用一个申请一个〕 L->next=NULL;for(i=n;i>0;i--){ p=(linklist)malloc(sizeof(LNode));scanf("%d",&p->data);p->next=L->next;L->next=p;数据结构代码全文共7页,当前为第5页。 }数据结构代码全文共7页,当前为第5页。}//创建一个有n个数据的数据链表〔带头结点,且是向后插入,前面数据一个个往后输〕voidcreatelinklist2(linklist&L,intn){inti;linklistp,r;//把p作为要新创建的节点,r永远是p节点前面的节点,这样链就不会断 L=(linklist)malloc(sizeof(LNode)); L->next=NULL; r=L;for(i=0;i<n;i++) { p=(linklist)malloc(sizeof(LNode));scanf("%d",&p->data);r->next=p;p->next=NULL; r=p; }}//输出线性链表中的数据voidputoutlinklist(linklist&L){linklistp;if(!L->next)exit(0); p=L;//p指向头结点 while(p->next)//p指下一个数据向的数据后面还有数据 { p=p->next;//p指向printf("%d",p->data); }printf("\n");}//获取链表中第n位的元素voidgetelem(linklist&L,intn,int&e){linklistp;inti=0; p=L; while(p&&i<n)//循环n次指向第n位元素 { p=p->next;//不断获取下一位元素数据结构代码全文共7页,当前为第6页。i++;数据结构代码全文共7页,当前为第6页。 }if(!p||i>n)exit(0); e=p->data;}//在链表第n位之前插入一个元素voidinsertlinklist(linklist&L,intn,inte){linklistp,q;inti=0; p=L; while(p&&i<n-1)//找到第n-1位元素的位置 { p=p->next;i++; }if(!p||i>n-1)exit(0); q=(linklist)malloc(sizeof(LNode)); q->data=e; q->next=p->next;p->next=q;}voiddeletelinklist(linklist&L,intn,int&e)//删除链表中第n个数据{linklistp;inti=0; p=L; while(p&&i<n-1)//找到第n-1个元素 { p=p->next;i++; }if(!q||i>n)exit(0); e=p->next->data;p->next=p->next->next;}intmain(){linklistl;inte=0;printf("创建一个有5个元素的链表\n");数据结构代码全文共7页,当前为第7页。//createlinklist1(l,5);数据结构代码全文共7页,当前为第7页。createlinklist2(l,5);printf("输入链表中的内容:\n
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年电力安全常识知识测试题及答案
- 2025年装载机理论考试试题库及参考答案
- 企业微盘核心功能解析
- 2024年人工智能现代科技知识考试题与答案
- 古典小说阅读方法
- 家庭病床护理
- ERP企业经营模拟沙盘实训
- 2025年文物保护工程专业人员资质考试文物施工通论试题答案
- 2025年医护人员职业竞赛题库及答案
- 第三次全国土地调查业务培训考试题库及答案
- 2025年贵州省省直机关公开遴选公务员笔试题及答案解析(A类)
- 网络智能体与NetMCP协议技术白皮书(2025年)-中移智库
- 新媒体营销基本知识培训课件
- 2025年美育综合考试试题及答案
- 亚马逊店铺授权协议书
- 部编小学语文单元作业设计四年级上册第三单元 3
- 邻近铁路营业线施工安全监测技术规程 (TB 10314-2021)
- 金工实训教程完整版课件全套课件
- 《食品贮运保鲜》课件第四章 粮食贮藏
- 47《心经》图解PPT课件(50页PPT)
- 常用侦查措施之跟踪 (1)
评论
0/150
提交评论