C语言基础——链表的相关操作
1 #include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <math.h>
#include <stdlib.h> typedef int elemtype; #define TRUE 0
#define FALSE 1
#define OK 1
#define ERROR 0
#define INFEASIBLE -1 #if(1) typedef struct LNode
{
struct LNode *next;
int date;
}*LinkList; //typedef LNode *LinkList; #endif #if(0) typedef struct LNode
{
struct LNode *next; elemtype data;
}; #endif void InitList(LinkList L)
{
L = (LinkList)malloc(sizeof(struct LNode));
if(!L)
{
exit(-);
}
L->next = NULL;
} void DestroyList(LinkList L)
{
LinkList q;
while(L)
{
q = L->next;
free(L);
L = q;
}
} void ClearList(LinkList L)
{
LinkList p, q;
p = L->next; //p = L的话就销毁了链表相当于DestroyList
while(p)
{
q = p->next;
free(p);
p = q;
} L->next = NULL;
} int ListEmpty(LinkList L)
{
if(L->next)
{
return FALSE;
} return TRUE;
} int ListLength(LinkList L)
{
int i = ;
LinkList p = L->next; //应该设立一个新的指针代替L, while(p)
{
i++;
p = p->next;
} return i;
} int GetElem(LinkList L, int i, elemtype *e)
{
int j;
LinkList p;
p = L; for(j = ; j < i; j++)
{
p = p->next;
} if(!p)
{
return ERROR;
} *e = p->date; return OK; } int LocateElem(LinkList L, elemtype *e)
{
int i = ;
LinkList p;
p = L->next; while(p)
{
i++; if(p->date == *e)
{
return i;
} p = p->next;
} return ;
} int PriorElem(LinkList L, elemtype cur_e, elemtype *pre_e)
{
LinkList p, q; p = L->next; while(p->next)
{
q = p->next; if(q->date == cur_e)
{
*pre_e = p->date; return OK; } p = q;
} return INFEASIBLE;
} int NextElem(LinkList L, elemtype cur_e, elemtype *next_e)
{
LinkList p; //remember it p = L->next; while(p->next)
{ if(p->date == cur_e)
{
*next_e = p->next->date;
return OK;
} p = p->next; } return INFEASIBLE; } int ListInsert(LinkList L, int i, elemtype e)
{
int j = ;
LinkList p = L, s; if(i < )
{
return ERROR;
}
s = (LinkList)malloc(sizeof(struct LNode));
s->date = e;
if(i == )
{
s->next = L; L = s;
}
else
{
while(p && j < i - )
{
p = p->next;
j++;
}
if(!p)
{
return ERROR; }
s->next = p->next;
p->next = s;
}
return OK; } int ListDelete(LinkList L, int i, elemtype *e)
{
int j = ;
LinkList p = L->next;
LinkList q = L; while(j < i)
{
p = p->next;
q = q->next;
j++;
} if(!p || j >= i)
{
return ERROR;
} q->next = p->next;
*e = p->date;
free(p); return OK;
} void ListTraverse(LinkList L)
{
LinkList q = L;
while(q)
{
printf("%d ", q->date);
q = q->next;
} //printf("\n\n");
} #if(0) void main()
{ // 除了几个输出语句外,主程序和main2-1.cpp很像
LinkList L = NULL; // 与main2-1.cpp不同
elemtype e, e0;
int i;
int j, k; InitList(L); for(j=; j<=; j++)
{
i = ListInsert(L, , &j);
} printf("在L的表头依次插入1~5后:L="); ListTraverse(L); // 依次对元素调用print(),输出元素的值 i = ListEmpty(L); printf("L是否空:i=%d(1:是0:否)\n",i); ClearList(L); printf("清空L后:L="); ListTraverse(L);
i = ListEmpty(L); printf("L是否空:i=%d(1:是0:否)\n",i); for(j=; j<=; j++)
{
ListInsert(L, j, &j);
} printf("在L的表尾依次插入1~10后:L="); ListTraverse(L);
GetElem(L, , &e); printf("第5个元素的值为%d\n",e);
for(j=; j<=; j++)
{
k = LocateElem(L, &j);
if(k)
{
printf("第%d个元素的值为%d\n",k,j);
}
else
{
printf("没有值为%d的元素\n",j);
}
}
for(j=;j<=;j++) // 测试头两个数据
{
GetElem(L, j, &e0); // 把第j个数据赋给e0
i = PriorElem(L, e0, &e); // 求e0的前驱
if(i == INFEASIBLE) printf("元素%d无前驱\n", e0);
else
printf("元素%d的前驱为%d\n", e0, e);
}
for(j=ListLength(L)-; j<=ListLength(L); j++) // 最后两个数据
{
GetElem(L, j, &e0); // 把第j个数据赋给e0
i=NextElem(L, e0, &e); // 求e0的后继
if(i == INFEASIBLE)
{
printf("元素%d无后继\n",e0);
}
else
{
printf("元素%d的后继为%d\n", e0, e);
}
}
k = ListLength(L); // k为表长 for(j=k+; j>=k; j--)
{
i = ListDelete(L, j, &e); // 删除第j个数据
if(i == ERROR)
{
printf("删除第%d个元素失败\n",j);
}
else
{
printf("删除第%d个元素成功,其值为%d\n", j, e);
}
}
printf("依次输出L的元素:"); ListTraverse(L);
DestroyList(L); printf("销毁L后:L=%u\n",L);
} #endif void main()
{
LinkList L = NULL;
int i, j;
InitList(L); for(j=; j<=; j++)
{
i = ListInsert(L, , j);
} printf("在L的表头依次插入1~5后:L="); ListTraverse(L); // 依次对元素调用print(),输出元素的值
}
曾经数据结构课练习过的,拿出来分享一下
C语言基础——链表的相关操作的更多相关文章
- 前端基础之jquery_mouse相关操作与不同
jquery中mouse相关操作与不同 mousedown() //当鼠标指针移动到元素上方,并按下鼠标左键时,会发生 mousedown 事件 mouseup() //当鼠标指针移动到元素上方,并松 ...
- Python 基础之集合相关操作与函数和字典相关函数
一:集合相关操作与相关函数 1.集合相关操作(交叉并补) (1)intersection() 交集 set1 = {"one","two","thre ...
- Oracle language types(语言种类) 表的相关操作 DDL数据定义语言
数据定义语言 Data Definition Language Statements(DDL)数据操纵语言 Data Manipulation Language(DML) Statements事务控制 ...
- Java 语言基础之数组常见操作
对数组操作最基本的动作: 存和取 核心思想: 就是对角标的操作 数组常见操作: 1, 遍历 2, 获取最大值和最小值 3, 排序 4, 查找 5, 折半查找 // 1. 遍历 int[] arr = ...
- C语言基础 (12) 文件的操作 FILE
课程回顾 结构体基本操作: 结构体类型的定义 // struct为关键字 Stu为自定义标识符 // struct Stu才是结构体类型 // 结构体成员不能在定义类型时赋值 struct Stu { ...
- C语言基础--数组及相关
概念: 一堆相同类型的数据的有序集合 格式: 元素类型 数组名称[ 元素个数 ] 定义数组: // 定义了一个名称叫做scores的数组, 数组中可以存放3个int类型的数据 ]; // 只要定义一 ...
- 01基础数据类型——list相关操作
#列表的创建#列表是由[]来表示的,将元素放在[]中,如lst=["aa","bb",["cc","dd"," ...
- 2.2 Go语言基础之位运算操作
一.位运算符 位运算符对整数在内存中的二进制位进行操作. 运算符 描述 & 参与运算的两数各对应的二进位相与. (两位均为1才为1) | 参与运算的两数各对应的二进位相或. (两位有一个为1就 ...
- C++实现链表的相关基础操作
链表的相关基础操作 # include <iostream> using namespace std; typedef struct LNode { int data; //结点的数据域 ...
随机推荐
- Elasticsearch 架构原理
为什么要学习架构? Elasticsearch的一些架构设计,对我们做性能调优.故障处理,具有非常重要的影响.下面将从Elasticsearch的准实时索引的实现.自动发现.rounting和repl ...
- 在windows平台上构建自己的PHP(php5.3+)
这是一篇翻译的文章,原文参见:https://wiki.php.net/internals/windows/stepbystepbuild 顺便提一句,wiki.php.net有很多精彩的内容,想深入 ...
- 用画小狗的方法来解释Java中的值传递
在开始看我画小狗之前,咱们先来看道很简单的题目: 下面程序的输出是什么? Dog myDog = new Dog("旺财"); changeName(myDog); System. ...
- 【转】Linux vmstat命令实战详解
好久没写博客了,上个月忙的晕头转向的实在没有心情.最近会发几篇PowerDNS的,先预告一下. 这篇是纯转的,原贴地址:http://www.cnblogs.com/ggjucheng/archive ...
- ADF系列-2.EO的高级属性
在上一篇博客 ADF系列-1.EO的各个属性初探 中介绍了EO的一些常用简单属性.本次将介绍EO中一些比较常用的一些高级属性 一.基于Sequence创建EO,一下介绍三种方式(以HR用户的Emplo ...
- Yii 集成 PHPExcel读取Excel文件
PHPexcel官方下载以后,放入Yii的protected\extensions\phpexcel下面 try { spl_autoload_unregister(array('YiiBase', ...
- UVa 10491 - Cows and Cars(全概率)
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- 【[SHOI2009]会场预约】
同样是从试炼场点进来的,这是一道非常需要耐心的题 不过明明就是我太菜了,真正的大佬都是一眼秒吧 首先我们有一种比较常规的暴力思路,就是用线段树来维护区间连续子段数,而拒绝掉所有与当前区间相冲突的预约我 ...
- Dropbox的CEO在MIT的毕业演讲
这是我今天看到的一个演讲,个人觉得和乔老大在斯坦佛的毕业演讲有异曲同工之妙,我也觉得对工科的我们很有启发意义,就此转载,希望与君共勉. 编者注:本篇文章基于Drew Houston 在 MIT 毕业典 ...
- UIButtonType各个类型的解释:
UIButtonType各个类型的解释: typedef NS_ENUM(NSInteger, UIButtonType) { UIButtonTypeCustom = , UIButtonTypeS ...