C语言链表练习
2012-06-15 19:26
190 查看
最近终于用C语言实现了链表的例程。代码如下:
想了自己学了这么久的程序,连链表都没有自己实现过。就写了一个,本以为会有数不清的错误,但是这次竟然只有一个小小的错误,一下解决,成寻正确运行了。高兴!
程序参照 《数据结构与算法分析》(c语言版)
(全文完)
若非注明,均为原创文章,转载请注明: 转载自大笨兔博客
本文出自 “大笨兔博客” 博客,请务必保留此出处http://dabentu.blog.51cto.com/4779949/899774
[code lang="js"] #include <stdio.h> #include <stdlib.h> typedef struct NODE Node; typedef Node *pNode; typedef pNode Position; typedef pNode List; typedef int Element; struct NODE{ Element key; pNode next; }; //创建一个链表 返回表头指针 List createList() { pNode header = NULL; if((header = (pNode)malloc(sizeof(Node))) != NULL){ header->next = NULL; header->key = 0; return header; } else{ printf("Create List failed"); return NULL; } } //测试空表 int isEmpty(List header) { return NULL == header->next; } //测试是否到表尾 int isLast(Position p) { return NULL == p->next; } //find例程,找到返回位置,否则返回NULL Position findElement(List header,Element key) { Position p; p = header->next; while(p->next != NULL && p->key != key) p = p->next; return p; } //找到key元素位置的前一个位置 Position findPrevious(List header,Element key) { Position p; p = header; while(p->next != NULL && p->next->key != key) p = p->next; return p; } void deleteElement(List header,Element key) { Position p,temp; p = findPrevious(header,key); if(!isLast(p)){//假设使用表头 找到了key,现在删除它 temp = p->next; p->next= temp->next; free(temp); } } //向链表插入元素,在位置p之后 int insertElement(List header,Position p,Element key) { Position temp; temp = (Position)malloc(sizeof(Node)); if(NULL == temp) return 0; temp->next = p->next; temp->key= key; p->next = temp; } //向链表尾插入元素 int insertLast(List header,Element key) { Position p,temp; temp = (Position)malloc(sizeof(Node)); if(NULL == temp) return 0; p = header; while(p != NULL && p->next!= NULL) p = p->next; temp->next= NULL; temp->key= key; p->next= temp; } void printList(List header) { Position p; p = header->next; while(p != NULL){ printf("%d ",p->key); p = p->next; } } int main() { pNode header = NULL; Position p; header = createList(); insertLast(header,4); insertLast(header,54); insertLast(header,5); insertLast(header,3); //上面是初始的链表 //测试插入函数 p = findElement(header,54); insertElement(header,p,8); //删除元素 deleteElement(header,3); printList(header); }
想了自己学了这么久的程序,连链表都没有自己实现过。就写了一个,本以为会有数不清的错误,但是这次竟然只有一个小小的错误,一下解决,成寻正确运行了。高兴!
程序参照 《数据结构与算法分析》(c语言版)
(全文完)
若非注明,均为原创文章,转载请注明: 转载自大笨兔博客
本文出自 “大笨兔博客” 博客,请务必保留此出处http://dabentu.blog.51cto.com/4779949/899774
相关文章推荐
- [练习]自己写的C语言链表模板 ver 1.0
- [iOS]C语言技术视频-17-指针变量高级用法练习二(使用堆内存完成链表结构的存储)
- 数据结构_2:链表:C语言练习
- c语言-简单学生信息管理(内存链表练习)
- 链表(c语言实现)--------------小练习
- 【c基础练习】c语言实现链表
- C语言单链表练习
- C语言练习01:单向链表的实现
- C语言单向链表的创建、释放、插入、删除、翻转操作练习
- 使用C语言写的练习小程序(主要使用链表)
- c语言 链表基础
- C语言 链表的基本操作实现 源码
- C语言第六次作业练习
- 算法精解_C语言 链表_单链表(应用:页帧管理)
- 链表ADT实现(C语言)2018.3.11
- 数据结构基础(3)---C语言实现单链表
- 【C语言】单链表的实现
- 课后练习,银行利息c语言
- c语言关于使用链表排序(选择排序、冒泡排序)