凉城c

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

一、对本章内容的小结:

  本章主要讲述了线性表的定义、特点、表示及实现,同时也说明了顺序表与链表之间的异同,让我们对顺序表和链表有了更深入的认识。学习本章知识后,我们  理解了线性表的基本性质。顺序表可以用数组来表示,可以随机存取元素,但是是静态分配内存空间;链表可用指针来表示,动态分配内存空间,但存取要从头指针开始。数组的优势在于查找数组元素非常方便,而链表可以更好地进行插入和删除工作。在实际应用中,我们应该结合实际情况,选择合适的算法和结构,以此让我们的程序占用更少的内存空间,效率、正确率更高。

 

二、完成作业或实践时解决困难的经验分享:

  (1)结合上学期学过的知识,我们可以将书本上的排序方法制作成一个函数,运用到作业中,解决排序的问题。我采用的是选择排序法:

void sort(int a[], int n)
{
 int i, j, p, t;
 for (i = 0; i < n - 1; i++)
 {
  p = i;
  for (j = i + 1; j < n; j++)
  {
   if (a[j] < a[p])
    p = j;
  }
  if (p != i)
  {
   t = a[p];
   a[p] = a[i];
   a[i] = t;
  }
 }
}

其中a[]表示的是要排序的数组,n表示数组元素的个数。

在主函数中,我们只需要调用该函数即可完成函数元素的升序排序。

  (2)我们可以采用int* a=new int[ ]的方式,动态分配内存空间,同时它具有数组的优点,在后面的操作上基本与数组无异,分配内存的方式如下:

int n;
cin >> n;
int* a = new int[n];
  (3)我们new出来的空间,在程序结束之前是一定要delete掉的,否则就会导致内存泄漏,采用int* a=new int[ ]的方式只需写 delete a; 即可,但在delete链表时则稍显麻烦,操作过程如下:
p = pHead;  //令p指向头指针
 while (p)
 {
  pL = p;  //令前指针指向p
  if (p->pNext)  //如果p的Next指针不为空
  {
   p = p->pNext;
   delete pL;  //删除前指针所在的节点
  }
  else  //此处表示p已指向的是最后一个节点
  {
   delete p;
   p = NULL;  //将p化为空指针,防止指针非法访问
  }
 }
 
三、参考资料:
  我参考的资料就主要是上学期的课本,它里面非常的内容非常基础,但在这次作业中,它也发挥了不小的作用,我通过这本书找到了效率最高的排序方法,并让它与本次作业形成了有机的结合。
 
四、存在的困难:
  对于概念我还是没有理解透彻;在算法上我的想法没有其他同学的巧妙,做作业的效率比其他同学低。我希望我可以多参考其他同学的做题思路及算法,以此改善自己的不足,完善自己的知识。
 
五、关于目标:
  多编程,多交流,总结已有的算法,学习他人的经验,改进学习方法。争取在接下来的一个月编程的效率能更快,准确率更高。
posted on 2019-03-17 23:31  凉城c  阅读(145)  评论(1编辑  收藏  举报