Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1879446
  • 博文数量: 333
  • 博客积分: 10791
  • 博客等级: 上将
  • 技术积分: 4314
  • 用 户 组: 普通用户
  • 注册时间: 2007-08-08 07:39
文章分类

全部博文(333)

文章存档

2015年(1)

2011年(116)

2010年(187)

2009年(25)

2008年(3)

2007年(1)

分类: C/C++

2009-04-06 22:25:38

2.1、设计一个算法,求单链表X中,内容为a的结点的地址
注意:内容为a的结点可能有多个
算法实现:
struct listNode{
      T data;
      struct listNOde *next;
}
 
struct dataAddress{
      struct listNode *address;
      struct dataAddress *next;
}
 
void search(T a; struct listNode *head){
      struct listNode *p = head;
      struct listAddress *q = NULL;
     
      while(p != NULL){
           if(a == p->data){
                 q->next->address = p;
                 q = q->next;
                 q->next = NULL;
           }
           p = p->next;
      }
}
2.3、单链表置逆
struct listNode{
      T data;
      struct listNode *next;
}
 
struct listNode
reverse(struct listNode *X){
      struct listNode *p,*q;
      p = X->next;
      q = p->next;
 
      while(p != NULL && q != NULL){
           p->next = q->next;
           q->next = X->next;
           X->next = q;
           q = p->next;
      }
      return X;
}
 
 
2.13、将Fibonacci序列的递归过程改写成非递归过程
 思路:
   if n > 2 入栈。栈里包含以下内容:flags表示f(n-1)和f(n-2)是否完成(1表示完成,0表示没有完成),n表示当前n的值,f表示f(n-1)和f(n-2)的和,f1表示f(n-1),f2表示f(n-2)。
   当n == 2时,一次出栈,并计算f的值,将flags置1;
 
2.17、模拟“迷宫问题”:数组元素1表示死路,0表示通路MAZE(1,1)为入口,MAZE(m,n)为出口
int maze[m+1][n+1];
int cx[m*n+1];//当前路径
int cy[m*n+1];
 
void Maze(int step, int x, int y){
     int i;
     cx[step] = x;cy[step] = y;
     if(m == x && n == y){
          for (i = 1; i <= step; i++)
              打印cx[i]与cy[i];
          return;
     }
     for(i = 0; i < 4; i++){
          int nx = x + dx[i];
          int ny = y + dy[i];
          if(0 == maze[nx][ny]               
                && x >= 1 && x <= m           
                && y >= 1 && y <= n)
          Maze(step +1, nx, ny);
     }
}
 
阅读(1103) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~