西电软件大作业Word文件下载.docx
《西电软件大作业Word文件下载.docx》由会员分享,可在线阅读,更多相关《西电软件大作业Word文件下载.docx(9页珍藏版)》请在冰豆网上搜索。
p=q;
//p后移
q=r;
//q后移
}
}
分析:
2、//按字母、数字、其它字符分解单链表
voidresolve(linklist*head,linklist*letter,linklist*digit,linklist*other){
linklist*p;
while(head->
next!
p=head->
//p指向第一个节点
head->
next=head->
//缩短循环链表
if((p->
data>
='
A'
&
p->
data<
Z'
)||(p->
a'
z'
))
insert(letter,p);
elseif(p->
0'
9'
)
insert(digit,p);
elseinsert(other,p);
//判断字母、数字和其它字符
3、//判字符串是否中心对称
intsymmetry(linklist*head,stack*s){
intl=length(head);
intn=l/2;
intx;
linklist*p=head->
for(inti=1;
i<
=n;
i++){
push(s,p->
data);
//把单链表的前一半元素压入堆栈
p=p->
if(l%2==1)p=p->
//当链表长度为奇数时
while(p->
x=pop(s);
if(x==p->
data)
p=p->
elsereturn0;
return1;
4、//入队
voidenqueue(qu*sq,datatypex){
for(inti=0;
m;
sq->
sequ[i]=x;
//出队
datatype*dequeue(qu*sq)
{
datatype*temp;
if(sq->
quelen==0)
{
printf("
queueisempty\n"
);
returnNULL;
else{
temp=(datatype*)malloc(sizeof(datatype));
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<
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<
D1;
i++)
r[i].key=-maxint;
//设置T个监视哨
k=0;
do{
h=d[k];
//取一趟的增量
for(i=h+D1;
N+D1;
temp=r[i];
j=i-h;
while(temp.key<
r[j].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<
idx[mid].key)high=mid-1;
elseif(k>
idx[mid].key)low=mid+1;
high=mid-1;
find=1;
}
if(low<
n)
i=idx[low].low;
//块的起始地址
bh=idx[low].high;
//块的终止地址
//块内顺序查找
while(i<
bh&
r[i].key!
=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<
r[j-1].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)
r[j]=r[j+1];
r[j+1]=temp;
for(intk=1;
k<
k++)
printf("
%5d"
r[k].key);
\n"
i++;