【复习代码】单链表
来源:互联网 发布:营销qq for mac 编辑:程序博客网 时间:2024/06/03 21:56
没有单独编写头文件和测试函数,写在同一个文件中。详细解释在【复习笔记】
#include<stdio.h>
#include<stdlib.h>#define TURE 1
#define FALSE 0
typedef int data_t;
typedef struct LNode {
data_t data;
struct LNode *next;
}LNode, *LinkList;
LinkList CreateLinkList(void)
{
LinkList L = (LNode *)malloc(sizeof(LNode));
if(NULL == L)
{
return NULL;
}
L->next = NULL;
return L;
}
void ClearLinkList(LinkList L)
{
LinkList q;
while(L->next)
{
q = L->next;
L->next = q->next;
free(q);
}
q = NULL; //防止q变成野指针
}
int LengthLinkList(LinkList L)
{
int count = 0;
LinkList p = L->next;
while(p)
{
count ++;
p = p->next;
}
return count;
}
int IsEmpty(LinkList L)
{
#if 0
if(L->next)
{
return FALSE;
}
return TRUE;
#endif
#if 1
if(0 == LengthLinkList(L))
{
return TURE;
}
return FALSE;
#endif
}
LinkList LocateLinkList(LinkList L, data_t x)
{
LinkList p = L->next;
while(p)
{
if(x == p->data)
{
return p;
}
p = p->next;
}
return NULL;
}
LinkList FindLinkList(LinkList L, int i)
{
if(i<1 || i>LengthLinkList(L))
{
return NULL;
}
LinkList p = L->next;
int j;
for(j = 1; j < i; j ++)
{
p = p->next;
}
return p;
}
int InsertLinkList(LinkList L, data_t x, int i)
{
if(i<1 || i>(LengthLinkList(L)+1))
{
return FALSE;
}
LinkList p = L;
int j;
for(j = 1; j < i; j ++)
{
p = p->next;
}
LinkList Q = (LinkList)malloc(sizeof(LNode));
if(Q != NULL)
{
Q->data = x;
Q->next = NULL;
}
Q->next = p->next;
p->next = Q;
return TURE;
}
int DelLinkList(LinkList L, int i)
{
if(i<1 || i >LengthLinkList(L))
{
return FALSE;
}
LinkList p = L;
int j;
for(j = 1; j < i; j ++)
{
p = p->next;
}
LinkList q = p->next;
p->next = q->next;
q->next = NULL;
free(q);
return TURE;
}
void DisplayLinkList(LinkList L)
{
LinkList p = L->next;
while(p)
{
printf("%-d ", p->data);
p = p->next;
}
printf("\n");
}
void RevLinkList(LinkList L)
{
LinkList p, q = L->next;
L->next = NULL;
while(q)
{
p = q->next;
q->next = L->next;
L->next = q;
q = p;
}
}
LinkList MergeLinkList(LinkList L1, LinkList L2)
{
LinkList p1 = L1->next, p2 = L2->next;
LinkList r = L1;
free(L2);
while(p1 && p2)
{
if(p1->data > p2->data)
{
r->next = p2;
p2 = p2->next;
}
else
{
r->next = p1;
p1 = p1->next;
}
r = r->next;
}
if(p1)
{
r->next = p1;
}
if(p2)
{
r->next = p2;
}
return L1;
}
int main()
{
LinkList L1 = CreateLinkList();
LinkList L2 = CreateLinkList();
int i;
for(i = 1; i <= 5; i ++)
{
InsertLinkList(L1, i, i);
}
for(i = 1; i <= 10; i++ )
{
InsertLinkList(L2, i+2, i);
}
DisplayLinkList(L1);
DisplayLinkList(L2);
printf("isempty: %d\n",IsEmpty(L1));
DelLinkList(L2, 3);
DisplayLinkList(L2);
MergeLinkList(L1, L2);
DisplayLinkList(L1);
printf("length: %d\n", LengthLinkList(L1));
printf("L1(10): %p\n", FindLinkList(L1, 10));
printf("Locate L1(shi): %p\n", LocateLinkList(L1, 10));
RevLinkList(L1);
DisplayLinkList(L1);
ClearLinkList(L1);
DisplayLinkList(L1);
return 0;
}
0 0
- 【复习代码】单链表
- stl复习 简单代码
- smarty缓存复习代码
- 基本代码复习
- 单链表复习
- C++复习(重点代码)
- 《第一行代码》复习一
- 《第一行代码》复习二
- 【复习代码】循环链表
- 【复习代码】双向链表
- Java复习之代码块
- JAVA 一篇代码复习反射
- 复习笔记-java代码块
- 近期代码回归复习练习(2)
- js复习之-dom编程[常用代码]
- jQuery 复习之复选框 简洁代码
- jQuery 复习之折叠菜单 简洁代码
- jQuery 复习之选项卡 简洁代码
- Android Volley完全解析(二),使用Volley加载网络图片
- 润乾报表-字符串函数
- HIVE创建目录和表
- Kafka源码深度解析-序列5 -Producer -RecordAccumulator队列分析
- MonkeyTalk 相对于 Appium 的优劣性
- 【复习代码】单链表
- ./dnw命令的错误?
- [慕课网作业-安卓]简易计算器
- 自连接
- Skyline系列软件的安装和使用
- 利用真值表法求主合取范式及主析取范式的实现
- 中位数计算
- 第五周项目4 —— 数制转换
- sublime安装插件