资源描述:
《【精品数据结构】数据结构.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第一章绪论例:计算f=1!+2!+3!+…+n!,用C语言描述。voidfactorsum(n)intn;{inti,j;intf,w;f=0;for(i=1;i〈=n;i++){w=1;for(j=1;j〈=i;j++)w=w*j;f=f+w;}return;}第二章线性表P16【算法2.1顺序表的插入】intInsert(ElemtypeList[],int*num,inti,Elemtypex){/*在顺序表List[]中,*num为表尾元素下标位置,在第i个元素前插入数据元素x,若成功,返回TRUE,否则返回FALSE。*/intj;if(i<0
2、
3、i>*num+1){print
4、f(“Error!”);/*插入位置出错*/returnFALSE;}if(*num>=MAXNUM-1){printf(“overflow!”);returnFALSE;}/*表已满*/for(j=*num;j>=i;j--)List[j+1]=List[j];/*数据元素后移*/List[i]=x;/*插入x*/(*num)++;/*长度加1*/returnTRUE;}P18【算法2.2顺序表的删除】intDelete(ElemtypeList[],int*num,inti){/*在线性表List[]中,*num为表尾元素下标位置,删除第i个长度,线性表的长度减1,若成功,则返回TR
5、UE;否则返回FALSE。*/intj;if(i<0
6、
7、i>*num){printf(“Error!”);returnFALSE;}/*删除位置出错!*/for(j=i+1;j<=*num;j++)List[j-1]=List[j];/*数据元素前移*/(*num)--;/*长度减1*/returnTRUE;}P19例:将有序线性表La={2,4,6,7,9},Lb={1,5,7,8},合并为Lc={1,2,4,5,6,7,7,8,9}。voidmerge(ElemtypeLa[],ElemtypeLb[],Elemtype**Lc){inti,j,k;intLa_length,Lb_l
8、ength;i=j=0;k=0;La_length=Length(La);Lb_length=Length(Lb);/*取表La,Lb的长度*/Initiate(Lc);/*初始化表Lc*/While(i<=La_length&&j<=Lb_length){a=get(La,i);b=get(Lb,j);if(a
9、h){b=get(La,j);insert(Lc,++k,b);}}P21例如:下面定义的结点类型中,数据域包含三个数据项:学号、姓名、成绩。Structstudent{charnum[8];/*数据域*/harname[8];/*数据域*/intscore;/*数据域*/structstudent*next;/*指针域*/}P21单链表结点结构定义为:Typedefstructslnode{Elemtypedata;structslnode*next;}slnodetype;slnodetype*p,*q,*s;P21【算法2.3单链表的初始化】intInitiate(slnodety
10、pe**h){if((*h=(slnodetype*)malloc(sizeof(slnodetype)))==NULL)returnFALSE;(*h)->next=NULL;returnTRUE;}P22【算法2.4单链表的后插入】{s=(slnodetype*)malloc(sizeof(slnodetype));s->data=x;s->next=p->next;p->next=s;}P22【算法2.5单链表的结点插入】{q=head;while(q->next!=p)q=q->next;s=(slnodetype*)malloc(sizeof(slnodetype));s->d
11、ata=x;s->next=p;q->next=s;}P23【算法2.6单链表的前插入】intinsert(slnodetype*h,inti,Elemtypex){/*在链表h中,在第i个数据元素前插入一个数据元素x*/slnodetype*p,*q,*s;intj=0;p=h;while(p!=NULL&&jnext;j++;/*寻找第i-1个结点*/}if(j!=i-1){printf(“Error!”)