菜鸟自学数据结构系列——(一)如何写出能够在VC下运行的单链表生成程序
2012-07-08 01:50
281 查看
最近打算自学数据结构,于是就在网上淘了两本书,一本是清华大学出版社出的严蔚敏老师的数据结构,一本是程杰的大话数据结构。直接看严老师的那一本实再是很吃力。于是我就先看大话的内容后,在深入的看严老师的书。大话数据结构写的非常有意思,语言很口语化,对于有些概念都用一些通俗的语言描述,看着不累,但是个人觉得其内容的深度太低,只适合了解一下基础的概念。想深入的学习,还是严老师的那本书。所以个人觉得两本书一起看会比较好。楼主之前学过C语言,但是学的很烂,最近也在复习C 的一些知识。数据结构用的多的C的知识是指针,结构体,还有函数。都是C的精华内容。这几天看完了线性表的内容,于是就想写几个程序。找到的大多程序都只是给了一个算法,对于我这样的菜鸟来说,程序是跑不起来的。于是最终找到的高一凡老师写的严蔚敏老师那本书的所有算法的具体实现。是可以直接在VC下运行的程序代码。看后自己写了一个含有头节点的单链表的生成和打印输出程序。有关单链表生成的插入发法主要有两种。头插法,和尾插法。这里我用的尾插法。下面是程序的代码
这里解释一下什么是尾插法。首先分配三个节点,头结点Phead,尾节点Ptail,以及新生成节点Pnew.首先给头结点和尾节点分配内存,然后让头节点和尾节点相等。
在新节点生成之后另Ptail的后继继节点尾Pnew,语句为Ptail->next= Pnew: 然后把Pnew后继指向空节点 Pnew->=NULL; 然后另Ptail=Pnew;
这样就把Pnew 挂在了Phead 的后面。
这以后每次循环之后 Ptail 总是指向链表的尾部
所以这种发法叫做尾插法
/************************************************************************/ /* 本程序实现含有头结点的单链表的建立和数据域元素的输出 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.首先给头结点和尾节点分配内存,然后让头节点和尾节点相等。
在新节点生成之后另Ptail的后继继节点尾Pnew,语句为Ptail->next= Pnew: 然后把Pnew后继指向空节点 Pnew->=NULL; 然后另Ptail=Pnew;
这样就把Pnew 挂在了Phead 的后面。
这以后每次循环之后 Ptail 总是指向链表的尾部
所以这种发法叫做尾插法
相关文章推荐
- 如何将VC++程序纯净打包(VS2013+OpenCV 2.4.9项目生成EXE文件如何在其他电脑上直接运行)
- 在VC中如何使程序开机时自动运行
- VC 如何使程序运行后自己删除自己
- VC如何使程序运行后自己删除自己
- VC 如何使程序运行后自己删除自己
- VS如何完美运行VC++程序代码
- 如何在不安装VC2008发布包的情况下,发布VC2008生成的程序
- VC程序中如何结束系统正在运行的其他进程 以及本程序自身
- 如何发布vc调用Python的独立运行的程序
- 如何将项目中的图片在生成后出现在程序运行文件夹中
- 扫盲回帖系列之3——在windows下编译生成的程序为什么不能在ubuntu下运行呢?
- 如何在VC中通过添加资源文件,使程序在Vista上用管理员权限运行
- VC程序中如何结束系统正在运行的其他进程
- 在程序运行期间,点击UIbutton,如何生成和改变uiview及其子类的内容title等
- 在VC中如何使程序开机时自动运行
- 如何让程序能够开机自动运行
- 如何使vc编译生成后的程序写sql不会产生乱码
- VC2005做的EXE程序如何在没安装VS2005(FrameWork)的机器上运行?
- 在运行该程序时如何检测与sql server是否能够连接
- 如何让程序能够开机自动运行