数据结构编程实例_第1页
数据结构编程实例_第2页
数据结构编程实例_第3页
数据结构编程实例_第4页
数据结构编程实例_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数据结构编程实例1 顺序表的基本操作#define LEN 100typedef struct sqlistint aLEN;int length;void init(struct sqlist *sq) /*初始化*/int i; for (i=0;i<LEN;i+) sq->ai=0; sq->length=0;void creat(struct sqlist *sq) /*建顺序表*/int i; printf("please input length"); scanf("%d",&sq->length); prin

2、tf("please input %d numsn",sq->length); for (i=1; i<=sq->length;i+) scanf("%d",&sq->ai); void print(struct sqlist *sq) /*输出顺序表*/ int i; for (i=1; i<=sq->length;i+) printf(" %d",sq->ai); printf("n");void insert(struct sqlist *sq,int pos

3、, int x) /*顺序表插入元素*/int i; for (i=sq->length;i>=pos;i-) sq->ai+1=sq->ai; sq->apos=x; sq->length=sq->length+1; int delete(struct sqlist *sq,int pos) /*顺序表删除元素*/int i,x; x=sq->apos; for (i=pos+1;i<=sq->length;i+) sq->ai-1=sq->ai; sq->length=sq->length-1; retur

4、n(x); main()int position,x; struct sqlist *list; struct sqlist slist; int xz=0; list =&slist; while (1) printf("1.initn"); printf("2.creatn"); printf("3.insertn"); printf("4.deleten"); printf("5.locate_valuen"); printf("6.locate_posn");

5、 printf("7.printn"); printf("0.exitn"); printf("please input your choice"); scanf("%d",&xz); switch(xz) case 1:init(list);break; case 2:creat(list);break; case 3:printf("pleast input inset position(pos) and value(x)"); scanf("%d%d",&

6、;position,&x); if (position<1|position>list->length+1|list->length>=LEN)printf("position errorn"); else insert(list,position,x); break; case 4:printf("pleast input delete position(pos)"); scanf("%d",&position); if (position<1|position>list-&

7、gt;length|list->length=0)printf("position errorn"); elseprintf("delete position=%d,delete data=%dn",position,delete(list,position); break; case 5:; case 6:; case 7:print(list);break; case 0:exit(0); 2 三种方法建立链表#include <stdio.h>typedef struct nodeint data; struct node *li

8、nk;NODE;NODE *creat1() /*按输入数据的顺序建立链表,输入数据通过个数控制*/int i,data,n;NODE *h=NULL,*p,*last=NULL;printf("please input the num:");scanf("%d",&n);printf("please input %d datas:",n);for (i=1;i<=n;i+) p=(NODE*) malloc (sizeof (NODE); scanf("%d",&p->data); i

9、f (i=1) h=p; else last->link=p; last=p; last->link=NULL; return(h);NODE *creat2()/*按输入数据的逆序建立链表,输入数据以0结束*/int data;NODE *h=NULL,*p;printf("please input datas(0 end)n");scanf("%d",&data);while (data) p=(NODE*) malloc (sizeof (NODE); p->data=data; if (h=NULL) h=p; h-&g

10、t;link=NULL; else p->link=h; h=p; scanf("%d",&data); return(h);NODE *creat3()/*按输入数据的大小顺序建立带头结点的链表,输入数据以0结束*/int data;NODE *h,*p,*q,*r;h=(NODE*) malloc (sizeof (NODE); h->link=NULL;printf("please input datas(0 end)n");scanf("%d",&data);while (data) p=(NODE

11、*) malloc (sizeof (NODE); p->data=data; p->link=NULL; if (h->link=NULL) h->link=p; else r=h; q=r->link; while (p->data>q->data && q) r=q; q=q->link; if (q) p->link=q; r->link=p; scanf("%d",&data); return(h->link); main()NODE *h,*p; int x; do

12、printf("=n"); printf("1.zhengxujianlianbiaon"); printf("2.nixujianlianbiaon"); printf("3.jianliyouxulianbiaon"); printf("0.tuichun"); printf("=n"); printf("please input your chosice"); scanf("%d",&x); switch(x) case

13、1: h=creat1();break; case 2: h=creat2();break; case 3: h=creat3();break; case 0: return; p=h; while (p) printf("%5d",p->data); p=p->link; printf("nn"); while (x);3 试写出逆转线性单链表的算法要逆转一个线性单链表,只需从头指针指向的结点开始扫描该链表,在扫描过程中改变各结点的指针(由指向后件改为指向原来的前件)即可。Struct node/*ET位数据元素类型*/ET d;struc

14、t node *next;invlst(head)struct node *head ;struct node *p, *q, *r ;if (*head=NULL) return;p=*head; q=p->next;p->next=NULL;while (q!=NULL)r=q->next; q->next=p;p=q; q=r;*head=p;return; 4 设有两个有序线性单链表,头指针分别为AH和BH。试写出将两个有序线性单链表合并为一个头指针为CH的有序线性单链表的算法,要求去掉重复元素。Struct node/*ET位数据元素类型*/ET d;stru

15、ct node *next;#include “stdio.h”mglst1(ah,bh,ch)struct node ah,bh,*ch;struct node *i, *j, *k, *p;et x;i=ah; j=bh; *ch=NULL; k=NULL;while (i!=NULL)&&(j!=NULL)if (j->d>=i->d) x=i->d; i=i->next;else x=j->d; j=j->next;if (*ch=NULL)p=(struct node *) malloc (sizeof(struct node

16、);p->d=x; *ch=p; k=p;else if (d!=k->d)p=(struct node *) malloc (sizeof(struct node);p->d=x; k->next=p; k=p;if (j=NULL)while (i!=NULtructL)x=i->d; i=i->next;if (*ch=NULL)p=(struct node *) malloc (sizeof(struct node);p->d=x; *ch=p; k=p;else if (d!=k->d)p=(struct node *) malloc

17、(sizeof(struct node);p->d=x; k->next=p; k=p;elsewhile (j!=NULL)x=j->d; j=j->next;if (*ch=NULL)p=(struct node *) malloc (sizeof(struct node);p->d=x; *ch=p; k=p;else if (d!=k->d)p=(struct node *) malloc (sizeof(struct node);p->d=x; k->next=p; k=p;if (k!=NULL) k->next=NULL;re

18、turn;5 试编写在二叉排序树中插入一个元素的算法。include “stdlib.h”struct btnodeET d;struct btnode *lchild;struct btnode *rchild;struct btnode *insort(bt,b)struct btnode *bt;ET b;struct btnode *p, *q;p=(struct btnode *)malloc (sizeof(struct btnode);p->d=b; p->lchild=NULL; p->rchild=NULL;q=bt;if (q=NULL) bt=p;else while (q->lchild!=p) && (q->rchild!=p)if (b<q->d)if (q->lchild!=NULL) q=q->lchild;el

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论