【黑马程序员】C语言-链表
2015-08-26 17:52
483 查看
单链表源代码
# include <stdio.h> # include <malloc.h> # include <stdlib.h> typedef struct Node //创建链表中的节点结构体 { int data; struct Node * pNext; }NODE, *PNODE; PNODE Create_List(void); //创建链表函数 bool Is_Empt(PNODE); //判断链表是否为空 void Traverse_List(PNODE); //遍历链表 bool Insert_List(PNODE, int, int); //在链表的某个位置插入数值 bool Delete_List(PNODE, int, int *); //删除链表某个元素 void Sort_List(PNODE); //排序链表 int Length_List(PNODE); //求链表的长度 int main(void) { int val; PNODE pHead; pHead = Create_List(); Traverse_List(pHead); printf("\n"); Sort_List(pHead); Traverse_List(pHead); return 0; } PNODE Create_List(void) { PNODE pHead = (PNODE)malloc(sizeof(NODE)); pHead->pNext = NULL; PNODE pTail = pHead; int i; int len; int val; if (pHead == NULL) { printf("动态分配内存失败!\n"); exit(-1); } printf("请输入要创建节点的个数:"); scanf("%d", &len); for (i=0; i<len; i++) { PNODE pNew = (PNODE)malloc(sizeof(NODE)); printf("请输入第%d个节点的值:", i+1); scanf("%d", &val); pNew->data = val; pTail->pNext = pNew; pNew->pNext = NULL; pTail = pNew; } return pHead; } bool Is_Empt(PNODE pHead) { if (pHead->pNext == NULL) { return true; } else { return false; } } void Traverse_List(PNODE pHead) { PNODE p; p = pHead->pNext; //遍历链表时,为什么要定义一个p,因为头指针pHead要始终指向头节点,所以用一个p来代替pHead进行链表遍历 if ( Is_Empt(pHead) ) { printf("\n"); } while (p != NULL) { printf("%d ",p->data); p = p->pNext; } return; } bool Insert_List(PNODE pHead, int pos, int val) { int i = 0; PNODE p = pHead; while (i<pos-1 && p != NULL) //该语句是要找到pos前面那个元素 { p = p->pNext; i++; } while (i>pos-1 || p == NULL) //该语句是判断i的取值是否合理 { return false; } PNODE q = (PNODE)malloc(sizeof(NODE)); q->data = val; q->pNext = p->pNext; p->pNext = q; return true; } bool Delete_List(PNODE pHead, int pos, int * pVal) { int i = 0; PNODE p = pHead; while (i<pos-1 && p != NULL) { p = p->pNext; ++i; } while (i>pos-1 || p == NULL) { return false; } PNODE pNew; pNew = p->pNext; *pVal = pNew->data; p->pNext = p->pNext->pNext; free(pNew); } void Sort_List(PNODE pHead) { int i, j, len, t; PNODE p = pHead->pNext; PNODE q ; len = Length_List(pHead); for (i=0; i<len-1; i++,p=p->pNext) { for (j=i, q=p->pNext; j<len-1; j++, q=q->pNext) { if (p->data > q->data) { t = p->data; p->data = q->data; q->data = t; } } } } int Length_List(PNODE pHead) { PNODE p = pHead->pNext; int len = 0; while (p != NULL) { len++; p = p->pNext; } return len; }
相关文章推荐
- 论C++的静态联编和动态联编
- log4cpp之快速入门
- C语言各种数据类型在系统中占的字节和取值范围
- C语言基础知识之(七):循环嵌套的用途和规律
- C语言提供了几个标准库函数 itoa() atoi()
- C++虚函数与纯虚函数用法与区别(转)
- 纯C语言INI文件解析
- C++与Java虚函数的区别
- 【C++码农】阻止屏保运行、显示器和系统待机
- MySQL的C语言API接口
- C/C++面试题(三)
- C/C++ memset的作用以及memcpy和strcpy的区别
- 用C#加载C++编写的win32dll
- C/C++面试题(二)
- C++ PDF文档相关操作
- c/c++编码规范(3)--google代码规范检测工具cpplint.py
- 优先队列C++实现和应用
- 详解C语言中free()函数与getpagesize()函数的使用
- iOS开发-C语言-分支结构
- C++ 面向对象 知识点 小结