社区应用 最新帖子 精华区 社区服务 会员列表 统计排行 社区论坛任务 迷你宠物
  • 2921阅读
  • 0回复

[笔试]2006年12月中兴在我们学校的笔试--数据结构

级别: 经院本科
发帖
1586
铜板
2193
人品值
2089
贡献值
15
交易币
0
好评度
1575
信誉值
0
金币
0
所在楼道
2006年12月中兴在我们学校的笔试,最后的大题</P> 

(其实这些大公司的笔试不难,也不就是如此,只要学一下数据结构就可以搞定!)


 
 

排序及查找方法
 
#include <malloc.h>
#include<stdio.h>
#define N 11
/*用监视哨查找*/
int search(int array[],int n,int k)
{int i;
 i=n-1;
array[0]=k;
while(array!=k) i--;
return(i);
}
/*折半查找法*/
int halfsearch(int array[],int n,int k)
{int i,j,mid;
 i=1;j=n;
while(i<=j)
{mid=(i+j)/2;
 if(k==array[mid]) return(mid);
else if(k<array[mid]) j=mid-1;
      else i=mid+1;
}
return(0);
}

/*冒泡排序法*/
void mpsort(int array[])
{int i,j,a;
a=0;
 for(i=1;i<N;i++)
  for(j=i+1;j<N;j++)
   if(array>array[j])
     {a=array;
     array=array[j];
     array[j]=a;}
}
/*直接插入排序*/
void insertsort(int array[])
{int i,j;
 for(i=2;i<N;i++)
 {array[0]=array;
j=i-1;
while(array[0]<array[j])
 {array[j+1]=array[j--];
 array[j+1]=array[0];
}
}
}
/*建立*/
void creat(int array[])
{int i;
 printf("enter the array:\n");
 for(i=1;i<N;i++)
 scanf("%d",&array);
}

/*显示*/
void print(int array[])
  {int i;
   printf("The numbers after sort is:\n");
   for(i=1;i<N;i++)
   printf("%d ",array);
   printf("\n");
  }


main()
{int a[11],i,x,chang;
 /*printf("enter the array\n");
 for(i=1;i<11;i++)
 scanf("%d",&a);*/

aga:
 printf("\nchang:1: use watching method finding\n      2:use half method finding\n      3: use directness intsert method sort\n      4:use bubble up method sort\n      5:exit\n");
 scanf("%d",&chang);
 switch (chang)
 {case 1:
       {creat(a);
 printf("Please int the search number:\n");
 scanf("%d",&x);
 printf("The number station is:%d\n",search(a,N,x));
 goto aga;
 }
  case 2:
     { creat(a);
       insertsort(a);
       print(a);
       printf("Please int the search number:\n");
       scanf("%d",&x);
       printf("The number station is:%d\n",halfsearch(a,N,x));
       goto aga;
      }
   case 3:
     {creat(a);
      insertsort(a);
      print(a);
      goto aga;
     }

   case 4:
     {creat(a);
      mpsort(a);
      print(a);
      goto aga;
     }

   case 5:{ printf("exit!\n");break;}
   default:{printf("Error!\n"); goto aga;}
}
}
 

 


二、线性链表的存储实现

struct LNODE{

ElemType data;

struct LNODE *next;

};

typedef struct LNODE LNode;

typedef struct LNODE * LinkList;

1初始化操作

Status Init_L(LinkList L){

if (L=(LinkList *)malloc(sizeof(LNode)))

{L->next=NULL;return 1;}

else return 0;

}

2插入操作

Status ListInsert_L(LinkList &L,int i,ElemType e){

p=L,j=0;

while(p&&j<i-1){p=p->next;++j;}

if(!p||j>i-1) return ERROR;

s=(LinkList)malloc(sizeof(LNode));

s->data=e;s->next=p->next;

p->next=s;

return OK;

}//ListInsert_L

 

3删除操作

Status ListDelete_L(LinkList &L,int i,ElemType &e){

p=L,j=0;

while(p&&j<i-1){p=p->next;++j;}

if(!p->next||j>i-1) return ERROR;

q=p->next;p->next=q->next;

e=q->data;free(q);

return OK;

}//ListDelete_L

 


4取某序号元素的操作

Status GetElem_L(LinkList &L,int i,ElemType &e){

p=L->next,j=1;

while(p&&j<i){p=p->next;++j;}

if(!p||j>i) return ERROR;

e=p->data;

return OK;

}//GetElem_L

5归并两个单链表的算法

void MergeList_L(LinkList &La,LinkList &Lb,LinkList &Lc){

//已知单链线性表La和Lb的元素按值非递减排列

//归并后得到新的单链线性表Lc,元素也按值非递减排列

pa=La->next;pb=Lb->next;

Lc=pc=La;

while(pa&&pb){

if(pa->data<=pb->data){

pc->next=pa;pc=pa;pa=pa->next;

}else{pc->next=pb;pc=pb;pb=pb->next;}

}

pc->next=pa?pa:pb;

free(Lb);

}//MergeList_L

 

 

头指针与头结点的区别:

头指针只相当于结点的指针域,头结点即整个线性链表的第一个结点,它的数据域可以放数据元素,也可以放线性表的长度等附加信息,也可以不存储任何信息。


取自"http://wiki.xyzp.net/index.php/2006%E5%B9%B412%E6%9C%88%E4%B8%AD%E5%85%B4%E5%9C%A8%E6%88%91%E4%BB%AC%E5%AD%A6%E6%A0%A1%E7%9A%84%E7%AC%94%E8%AF%95--%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84"
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水
描述
快速回复

您目前还是游客,请 登录注册
欢迎提供真实交流,考虑发帖者的感受
认证码:
验证问题:
10+5=?,请输入中文答案:十五