西电软件大作业.docx
- 文档编号:2254181
- 上传时间:2022-10-28
- 格式:DOCX
- 页数:9
- 大小:103.85KB
西电软件大作业.docx
《西电软件大作业.docx》由会员分享,可在线阅读,更多相关《西电软件大作业.docx(9页珍藏版)》请在冰豆网上搜索。
西电软件大作业
软件技术基础大作业
电子工程学院
2016.12
1、//单链表逆置
voidinvert(linklist*head){
linklist*p,*q,*r;//p指向前一个结点,q指向p后的结点,r用于保存q指针域的值
p=head->next;//p指向第一个结点
q=head->next->next;//q指向第二个结点
head->next->next=NULL;
while(q!
=NULL){
r=q->next;//保存q指针域的值,接下来会将此值赋予p
q->next=p;//修改q的指针域,使其指向p所指结点,以达到逆置的目的
p=q;//p后移
q=r;//q后移
}
head->next=p;
}
分析:
2、//按字母、数字、其它字符分解单链表
voidresolve(linklist*head,linklist*letter,linklist*digit,linklist*other){
linklist*p;
while(head->next!
=NULL){
p=head->next;//p指向第一个节点
head->next=head->next->next;//缩短循环链表
if((p->data>='A'&&p->data<='Z')||(p->data>='a'&&p->data<='z'))
insert(letter,p);
elseif(p->data>='0'&&p->data<='9')
insert(digit,p);
elseinsert(other,p);//判断字母、数字和其它字符
}
}
分析:
3、//判字符串是否中心对称
intsymmetry(linklist*head,stack*s){
intl=length(head);
intn=l/2;
intx;
linklist*p=head->next;
for(inti=1;i<=n;i++){
push(s,p->data);//把单链表的前一半元素压入堆栈
p=p->next;
}
if(l%2==1)p=p->next;//当链表长度为奇数时
while(p->next!
=NULL){
x=pop(s);
if(x==p->data)
p=p->next;
elsereturn0;
}
return1;
}
分析:
4、//入队
voidenqueue(qu*sq,datatypex){
for(inti=0;i sq->sequ[i]=x; } } //出队 datatype*dequeue(qu*sq) { datatype*temp; if(sq->quelen==0) { printf("queueisempty\n");returnNULL; } else{ temp=(datatype*)malloc(sizeof(datatype)); sq->quelen--; *temp=sq->sequ[(sq->rear-sq->quelen+m)%m]; return(temp); } } 分析: 5、//顺序串的朴素模式匹配 intIndex(seqstring*S,seqstring*subS){ inti=1,j=1;//位序从1开始 while(i<=S->len&&j<=subS->len) if(S->str[i-1]==subS->str[j-1]) { i++;j++; }//继续比较后面的字符 else { i=i-j+2;j=1; }//本趟不匹配,设置下一趟匹配的起始位序 if(j>subS->len)return(i-subS->len);//匹配成功 elsereturn(-1);//匹配不成功 } 分析: 6、//添加删除子串算法 voidstrDelete(seqstring*S,intpos,intlen){ chartemp[maxsize]; if(pos>=1&&len<=S->length-len+1){ strncpy_s(temp,S->str,pos-1);//strncpy_s与strncpy具有相同的功能,用于将源字符串复制到目的字符串 strcpy_s(temp+pos-1,maxsize,S->str+pos+len-1);//strcpy_s与strcpy具有相同的功能 strcpy_s(S->str,maxsize,temp); S->length=S->length-len; } } 分析: 7、//希尔排序 voidshellsort(rectyper[],intd[]) { inti,j,k,h; rectypetemp; intmaxint=32767; for(i=0;i r[i].key=-maxint;//设置T个监视哨 k=0; do{ h=d[k];//取一趟的增量 for(i=h+D1;i { temp=r[i]; j=i-h; while(temp.key { r[j+h]=r[j]; j=j-h; } r[j+h]=temp; }//组内直接插入法排序 print(r,N);//输出一趟的排序结果 k++; }while(h! =1); } 分析: 8、//折半查找索引表,块内顺序查找 intblksearch(recordr[],indexidx[],keytypek,intn) { inti,low=0,high=n-1,mid,bh,find=0; //折半查找索引表 while(low<=high&&! find) { mid=(low+high)/2; if(k elseif(k>idx[mid].key)low=mid+1; else { high=mid-1; find=1; } } if(low { i=idx[low].low;//块的起始地址 bh=idx[low].high;//块的终止地址 } //块内顺序查找 while(i =k)i++; if(r[i].key! =k)i=-1; returni; } 分析: 9、//双向起泡排序 voiddbubblesort(sequenlistr[],intn) { inti=1,j,noswap=1; sequenlisttemp; while(noswap){ noswap=0; for(j=n-i+1;j>=i+1;j--) if(r[j].key { noswap=1; temp=r[j]; r[j]=r[j-1]; r[j-1]=temp; } for(j=i+1;j<=n-i;j++) if(r[j].key>r[j+1].key) { noswap=1; temp=r[j]; r[j]=r[j+1]; r[j+1]=temp; } for(intk=1;k<=n;k++) printf("%5d",r[k].key); printf("\n"); i++; } } 分析:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 作业
![提示](https://static.bdocx.com/images/bang_tan.gif)