ImageVerifierCode 换一换
格式:DOCX , 页数:64 ,大小:32.80KB ,
资源ID:7375004      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7375004.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构例题123.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构例题123.docx

1、数据结构例题123例一:#include /*包含输入输出头文件*/#includeSeqList.h /*包含顺序表实现文件*/void DelElem(SeqList *A,SeqList B); /*删除A中出现B的元素的函数声明*/void main() int i,j,flag; DataType e; SeqList A,B; /*声明顺序表A和B*/ InitList(&A); /*初始化顺序表A*/ InitList(&B); /*初始化顺序表B*/ for(i=1;i=10;i+) /*将1-10插入到顺序表A中*/ if(InsertList(&A,i,i)=0) prin

2、tf(位置不合法); return; for(i=1,j=1;j=6;i=i+2,j+) /*插入顺序表B中六个数*/ if(InsertList(&B,j,i*2)=0) printf(位置不合法); return; printf(顺序表A中的元素:n); for(i=1;i=A.length;i+) /*输出顺序表A中的每个元素*/ flag=GetElem(A,i,&e); /*返回顺序表A中的每个元素到e中*/ if(flag=1) printf(%4d,e); printf(n); printf(顺序表B中的元素:n); for(i=1;i=B.length;i+) /*输出顺序表B

3、中的每个元素*/ flag=GetElem(B,i,&e); /*返回顺序表B中的每个元素到e中*/ if(flag=1) printf(%4d,e); printf(n); printf(将在A中出现B的元素删除后A中的元素:n); DelElem(&A,B); /*将在顺序表A中出现的B的元素删除*/ for(i=1;i=A.length;i+) /*显示输出删除后A中所有元素*/ flag=GetElem(A,i,&e); if(flag=1) printf(%4d,e); printf(n); void DelElem(SeqList *A,SeqList B)/*删除A中出现B的元素

4、的函数实现*/ int i,flag,pos; DataType e; for(i=0;i0) DeleteList(A,pos,&e); /*如果找到该元素,将其从A中删除*/ 重点1:#define ListSize 100typedef int DataType;typedef struct DataType listListSize; int length;SeqList;void InitList(SeqList *L) /*将线性表初始化为空的线性表只需要把线性表的长度length置为0*/ L-length=0; /*把线性表的长度置为0*/int ListEmpty(SeqLi

5、st L) /*判断线性表是否为空,线性表为空返回1,否则返回0*/ if(L.length=0) /*判断线性表的长度是否为9*/ return 1; /*当线性表为空时,返回1;否则返回0*/ else return 0;int GetElem(SeqList L,int i,DataType *e) /*查找线性表中第i个元素。查找成功将该值返回给e,并返回1表示成功;否则返回-1表示失败。*/ if(iL.length) /*在查找第i个元素之前,判断该序号是否合法*/ return -1; *e=L.listi-1; /*将第i个元素的值赋值给e*/ return 1;int Loc

6、ateElem(SeqList L,DataType e) /*查找线性表中元素值为e的元素,查找成功将对应元素的序号返回,否则返回0表示失败。*/ int i; for(i=0;iL.length;i+) /*从第一个元素开始比较*/ if(L.listi=e) return i+1; return 0;int InsertList(SeqList *L,int i,DataType e) /*在顺序表的第i个位置插入元素e,插入成功返回1,如果插入位置不合法返回-1,顺序表满返回0*/ int j; if(iL-length+1) /*在插入元素前,判断插入位置是否合法*/ printf(

7、插入位置i不合法!n); return -1; else if(L-length=ListSize) /*在插入元素前,判断顺序表是否已经满,不能插入元素*/ printf(顺序表已满,不能插入元素。n); return 0; else for(j=L-length;j=i;j-) /*将第i个位置以后的元素依次后移*/ L-listj=L-listj-1; L-listi-1=e; /*插入元素到第i个位置*/ L-length=L-length+1; /*将顺序表长增1*/ return 1; int DeleteList(SeqList *L,int i,DataType *e) int

8、 j; if(L-length=0) printf(顺序表已空不能进行删除!n); return 0; else if(iL-length) printf(删除位置不合适!n); return -1; else *e=L-listi-1; for(j=i;jlength-1;j+) L-listj-1=L-listj; L-length=L-length-1; return 1; int ListLength(SeqList L) return L.length;void ClearList(SeqList *L) L-length=0;例二:#include /*包含输入输出头文件*/#de

9、fine ListSize 100typedef int DataType;typedef struct DataType listListSize; int length;SeqList;#includeSeqList.h /*包含顺序表实现文件*/void MergeList(SeqList A,SeqList B,SeqList *C); /*合并顺序表A和B中元素的函数声明*/void main() int i,flag; DataType a=6,11,11,23; DataType b=2,10,12,12,21; DataType e; SeqList A,B,C; /*声明顺序

10、表A,B和C*/ InitList(&A); /*初始化顺序表A*/ InitList(&B); /*初始化顺序表B*/ InitList(&C); /*初始化顺序表C*/ for(i=1;i=sizeof(a)/sizeof(a0);i+) /*将数组a中的元素插入到顺序表A中*/ if(InsertList(&A,i,ai-1)=0) printf(位置不合法); return; for(i=1;i=sizeof(b)/sizeof(b0);i+) /*将数组b中元素插入到顺序表B中*/ if(InsertList(&B,i,bi-1)=0) printf(位置不合法); return;

11、printf(顺序表A中的元素:n); for(i=1;i=A.length;i+) /*输出顺序表A中的每个元素*/ flag=GetElem(A,i,&e); /*返回顺序表A中的每个元素到e中*/ if(flag=1) printf(%4d,e); printf(n); printf(顺序表B中的元素:n); for(i=1;i=B.length;i+) /*输出顺序表B中的每个元素*/ flag=GetElem(B,i,&e); /*返回顺序表B中的每个元素到e中*/ if(flag=1) printf(%4d,e); printf(n); printf(将在A中出现B的元素合并后C中

12、的元素:n); MergeList(A,B,&C); /*将在顺序表A和B中的元素合并*/ for(i=1;i=C.length;i+) /*显示输出合并后C中所有元素*/ flag=GetElem(C,i,&e); if(flag=1) printf(%4d,e); printf(n); void MergeList(SeqList A,SeqList B,SeqList *C)/*合并顺序表A和B的元素到C中,并保持元素非递减排序*/ int i,j,k; DataType e1,e2; i=1;j=1;k=1; while(i=A.length&j=B.length) GetElem(A

13、,i,&e1); /*取出顺序表A中的元素*/ GetElem(B,j,&e2); /*取出顺序表B中的元素*/ if(e1=e2) /*比较顺序表A和顺序表B中的元素*/ InsertList(C,k,e1); /*将较小的一个插入到C中*/ i+; /*往后移动一个位置,准备比较下一个元素*/ k+; else InsertList(C,k,e2); /*将较小的一个插入到C中*/ j+; /*往后移动一个位置,准备比较下一个元素*/ k+; while(i=A.length) /*如果A中元素还有剩余,这时B中已经没有元素*/ GetElem(A,i,&e1); InsertList(C

14、,k,e1); /*将A中剩余元素插入到C中*/ i+; k+; while(jlength=A.length+B.length; /*C的表长等于A和B的表长的和*/重点2:void InitList(LinkList *head)/*将单链表初始化为空。动态生成一个头结点,并将头结点的指针域置为空。*/ if(*head=(LinkList)malloc(sizeof(ListNode)=NULL) /*为头结点分配一个存储空间*/ exit(-1); (*head)-next=NULL; /*将单链表的头结点指针域置为空*/int ListEmpty(LinkList head) /*判

15、断单链表是否为空,就是通过判断头结点的指针域是否为空*/ if(head-next=NULL) /*判断单链表头结点的指针域是否为空*/ return 1; /*当单链表为空时,返回1;否则返回0*/ else return 0;ListNode *Get(LinkList head,int i) /*查找单链表中第i个结点。查找成功返回该结点的指针表示成功;否则返回NULL表示失败。*/ ListNode *p; int j; if(ListEmpty(head) /*在查找第i个元素之前,判断链表是否为空*/ return NULL; if(inext!=NULL&jnext; j+; i

16、f(j=i) return p; /*找到第i个结点,返回指针p*/ else return NULL; /*如果没有找到第i个元素,返回NULL*/ListNode *LocateElem(LinkList head,DataType e) /*查找线性表中元素值为e的元素,查找成功将对应元素的结点指针返回,否则返回NULL表示失败。*/ ListNode *p; p=head-next; /*指针p指向第一个结点*/ while(p) if(p-data!=e) /*找到与e相等的元素,返回该序号*/ p=p-next; else break; return p;int LocatePos

17、(LinkList head,DataType e) /*查找线性表中元素值为e的元素,查找成功将对应元素的序号返回,否则返回0表示失败。*/ ListNode *p; int i; if(ListEmpty(head) /*在查找第i个元素之前,判断链表是否为空*/ return 0; p=head-next; /*指针p指向第一个结点*/ i=1; while(p) if(p-data=e) /*找到与e相等的元素,返回该序号*/ return i; else p=p-next; i+; if(!p) /*如果没有找到与e相等的元素,返回0,表示失败*/ return 0;int Inse

18、rtList(LinkList head,int i,DataType e)/*在单链表中第i个位置插入一个结点,结点的元素值为e。插入成功返回1,失败返回0*/ ListNode *p,*pre; /*定义指向第i个元素的前驱结点指针pre,指针p指向新生成的结点*/ int j; pre=head; /*指针p指向头结点*/ j=0; while(pre-next!=NULL&jnext; j+; if(!pre) /*如果没找到,说明插入位置错误*/ printf(插入位置错); return 0; /*新生成一个结点,并将e赋值给该结点的数据域*/ if(p=(ListNode*)ma

19、lloc(sizeof(ListNode)=NULL) exit(-1); p-data=e; /*插入结点操作*/ p-next=pre-next; pre-next=p; return 1;int DeleteList(LinkList head,int i,DataType *e)/*删除单链表中的第i个位置的结点。删除成功返回1,失败返回0*/ ListNode *pre,*p; int j; pre=head; j=0; while(pre-next!=NULL&pre-next-next!=NULL&jnext; j+; if(j!=i-1) /*如果没找到要删除的结点位置,说明删

20、除位置错误*/ printf(删除位置错误); return 0; /*指针p指向单链表中的第i个结点,并将该结点的数据域值赋值给e*/ p=pre-next; *e=p-data;/*将前驱结点的指针域指向要删除结点的下一个结点,也就是将p指向的结点与单链表断开*/ pre-next=p-next; free(p); /*释放p指向的结点*/ return 1;int ListLength(LinkList head) ListNode *p; int count=0; p=head; while(p-next!=NULL) p=p-next; count+; return count;vo

21、id DestroyList(LinkList head) ListNode *p,*q; p=head; while(p!=NULL) q=p; p=p-next; free(q); 例三:/*包含头文件*/#include #include#include /*宏定义和单链表类型定义*/#define ListSize 100typedef int DataType;typedef struct Node DataType data; struct Node *next;ListNode,*LinkList;#includeLinkList.h /*包含单链表实现文件*/void DelE

22、lem(LinkList A,LinkList B); /*删除A中出现B的元素的函数声明*/void DelElem2(LinkList A,LinkList B);void main() int i; DataType a=2,3,6,7,9,14,56,45,65,67; DataType b=3,4,7,11,34,54,45,67; LinkList A,B; /*声明单链表A和B*/ ListNode *p; InitList(&A); /*初始化单链表A*/ InitList(&B); /*初始化单链表B*/ for(i=1;i=sizeof(a)/sizeof(a0);i+)

23、/*将数组a中元素插入到单链表A中*/ if(InsertList(A,i,ai-1)=0) printf(位置不合法); return; for(i=1;i=sizeof(b)/sizeof(b0);i+) /*将数组b中元素插入单链表B中*/ if(InsertList(B,i,bi-1)=0) printf(位置不合法); return; printf(单链表A中的元素有%d个:n,ListLength(A); for(i=1;idata); /*输出单链表A中的每个元素*/ printf(n); printf(单链表B中的元素有%d个:n,ListLength(B); for(i=1;

24、idata); /*输出单链表B中的每个元素*/ printf(n); DelElem2(A,B); /*将在单链表A中出现的B的元素删除,即A-B*/ printf(将在A中出现B的元素删除后(A-B),现在A中的元素还有%d个:n,ListLength(A); for(i=1;idata); /*显示输出删除后A中所有元素*/ printf(n); void DelElem(LinkList A,LinkList B)/*删除A中出现B的元素的函数实现*/ int i,pos; DataType e; ListNode *p; /*在单链表B中,取出每个元素与单链表A中的元素比较,如果相等则删除A中元素对应的结点*/ for(i=1;idata); /*比较B中的元素是否与A中的元素相等*/ if(pos0) DeleteList(A,pos,&e); /*如果相等,将其从A中删除*/ void De

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1