菜鸟自学数据结构系列——(一)如何写出能够在VC下运行的单链表生成程序

最近打算自学数据结构,于是就在网上淘了两本书,一本是清华大学出版社出的严蔚敏老师的数据结构,一本是程杰的大话数据结构。直接看严老师的那一本实再是很吃力。于是我就先看大话的内容后,在深入的看严老师的书。大话数据结构写的非常有意思,语言很口语化,对于有些概念都用一些通俗的语言描述,看着不累,但是个人觉得其内容的深度太低,只适合了解一下基础的概念。想深入的学习,还是严老师的那本书。所以个人觉得两本书一起看会比较好。楼主之前学过C语言,但是学的很烂,最近也在复习C 的一些知识。数据结构用的多的C的知识是指针,结构体,还有函数。都是C的精华内容。这几天看完了线性表的内容,于是就想写几个程序。找到的大多程序都只是给了一个算法,对于我这样的菜鸟来说,程序是跑不起来的。于是最终找到的高一凡老师写的严蔚敏老师那本书的所有算法的具体实现。是可以直接在VC下运行的程序代码。看后自己写了一个含有头节点的单链表的生成和打印输出程序。有关单链表生成的插入发法主要有两种。 头插法,和尾插法。这里我用的 尾插法。下面是程序的代码
/************************************************************************/
/* 本程序实现含有头结点的单链表的建立和数据域元素的输出

2012年7月8日0:14:05                                 */
/************************************************************************/
#include < stdio.h >
#include < malloc.h >
typedef int ElemType ;

 typedef struct  LNode // 线性表的单链表存储结构
{
  ElemType data;
  struct LNode *next;
} LNode,*Pnode; // 这样以后LNode 相当于struct LNode Pnode 它表示的是结构体的数据类型。Pnode 相当于struct LNode *
 
 /*线性表创建函数*/
  Pnode creat_linklist(void)
{
   int i;   //循环的计数参数
   int tem; // 暂时存储用户输入节点的数据域的值
   int len; //创建线性表的长度
   Pnode phead,pnew,ptail;// 定义三个节点 phead 表示头结点,pnew 表示新生成的节点,ptail表示尾节点。
   phead = (Pnode)malloc(sizeof(LNode));// 为头结点分配一段内存
   ptail = phead;// 让头节点指向尾节点,利用尾插法建立链表。
   ptail ->next = NULL;//尾节点后继指向空
   
   printf("请输入需要生成单链表节点的个数:len = ");
   scanf("%d",&len);
  
  for (i = 0;i < len; i++ )
  {
   printf("请输入单链表的第%d个节点的值:",i+1);
   scanf("%d",&tem);
   pnew = (Pnode)malloc(sizeof(LNode));//生成一个新节点
   pnew->data = tem;//将用户输入的值赋给新节点的数据域
   ptail->next = pnew ;//尾插法的实现
   pnew->next=NULL;
   ptail = pnew;
   
  }
 return phead;
}
/* 线性表遍历输出*/
 void traverse_linklist (Pnode phead)
 {
   Pnode p = phead->next;
   
   while (NULL != p)
   {
	   printf(" %d ", p->data);
	   p = p->next;
   }
  
   return;
 }

 int main(void)
  {
      Pnode phead = NULL;
	  phead = creat_linklist();
      traverse_linklist(phead);
      return 0;
  }

这里解释一下什么是尾插法。首先分配三个节点,头结点Phead,尾节点Ptail,以及新生成节点Pnew.首先给头结点和尾节点分配内存,然后让头节点和尾节点相等。菜鸟自学数据结构系列——(一)如何写出能够在VC下运行的单链表生成程序_第1张图片

在新节点生成之后另Ptail的后继继节点尾Pnew,语句为Ptail->next= Pnew: 然后把Pnew后继指向空节点 Pnew->=NULL; 然后另Ptail=Pnew;

这样就把Pnew 挂在了Phead 的后面。

菜鸟自学数据结构系列——(一)如何写出能够在VC下运行的单链表生成程序_第2张图片

这以后每次循环之后 Ptail 总是指向链表的尾部

所以这种发法叫做尾插法


你可能感兴趣的:(数据结构,算法,struct,null,存储,语言)