算法学习-数据结构之链表操作,创建,插入,删除,查找。
2014-07-25 22:59
1021 查看
链表算是一个最简单的数据结构了。
这里写下链表的各种操作部分,之后对算法的实现需要这些基本的操作。
代码如下:
//
// main.cpp
// LinkList
//
// Created by Alps on 14-7-25.
// Copyright (c) 2014年 chen. All rights reserved.
//
#include <iostream>
using namespace std;
struct Node;
typedef struct Node *PtrNode;
typedef PtrNode List;
typedef PtrNode Position;
List MakeEmpty(List L);
int IsEmpty(List L);
int IsLast(Position P, List L);
Position Find(int X, List L);
void Delete(int X, List L);
Position FindPrevious(int X, List L);
void Insert(int X, List L, Position P);
void DeleteList(List L);
//Position Header(List L);
//Position First(List L);
//Position Advance(List L);
//int Retrieve(Position P);
void Print(List L);
struct Node{
int Element;
Position Next;
};
void Print(List L){
Position P;
P = L->Next;
while (P != NULL) {
printf("%d ",P->Element);
P = P->Next;
}
printf("\n");
}
int IsEmpty(List L){
return L->Next == NULL;
}
int IsLast(Position P, List L){
return P->Next == NULL;
}
Position Find(int X, List L){
Position P;
P = L->Next;
while (P->Element != X && P != NULL) {
P = P->Next;
}
return P;
}
Position FindPrevious(int X, List L){
Position P;
P = L->Next;
while (P->Next->Element != X && P->Next != NULL) {
P = P->Next;
}
return P;
}
void Delete(int X, List L){
Position P;
P = FindPrevious(X, L);
Position tmp;
if (!IsLast(P, L)) {
tmp = P->Next;
P->Next = tmp->Next;
free(tmp);
}
}
void Insert(int X, List L, Position P){
Position tmp = (Position)malloc(sizeof(struct Node));
if (tmp == NULL) {
printf("out of memory in fun Insert\n");
}
tmp->Element = X;
tmp->Next = P->Next;
P->Next = tmp;
}
void DeleteList(List L){
Position P, tmp;
P = L->Next;
tmp = P->Next;
while (P != NULL) {
free(P);
if (tmp == NULL) {
break;
}
P = tmp;
tmp = P->Next;
}
L->Next = NULL;
}
int main(int argc, const char * argv[])
{
List L = (List)malloc(sizeof(struct Node));
Insert(1, L, L);
Insert(3, L, L->Next);
Insert(5, L, L->Next->Next);
Print(L);
Position P = Find(3, L);
printf("%d\n",P->Element);
P = FindPrevious(3, L);
printf("%d\n",P->Element);
// Delete(2, L);
Print(L);
DeleteList(L);
Print(L);
return 0;
}
函数操作都很明显,也很简单~~
mark下,以后省的写的时候出现空指针。
这里写下链表的各种操作部分,之后对算法的实现需要这些基本的操作。
代码如下:
//
// main.cpp
// LinkList
//
// Created by Alps on 14-7-25.
// Copyright (c) 2014年 chen. All rights reserved.
//
#include <iostream>
using namespace std;
struct Node;
typedef struct Node *PtrNode;
typedef PtrNode List;
typedef PtrNode Position;
List MakeEmpty(List L);
int IsEmpty(List L);
int IsLast(Position P, List L);
Position Find(int X, List L);
void Delete(int X, List L);
Position FindPrevious(int X, List L);
void Insert(int X, List L, Position P);
void DeleteList(List L);
//Position Header(List L);
//Position First(List L);
//Position Advance(List L);
//int Retrieve(Position P);
void Print(List L);
struct Node{
int Element;
Position Next;
};
void Print(List L){
Position P;
P = L->Next;
while (P != NULL) {
printf("%d ",P->Element);
P = P->Next;
}
printf("\n");
}
int IsEmpty(List L){
return L->Next == NULL;
}
int IsLast(Position P, List L){
return P->Next == NULL;
}
Position Find(int X, List L){
Position P;
P = L->Next;
while (P->Element != X && P != NULL) {
P = P->Next;
}
return P;
}
Position FindPrevious(int X, List L){
Position P;
P = L->Next;
while (P->Next->Element != X && P->Next != NULL) {
P = P->Next;
}
return P;
}
void Delete(int X, List L){
Position P;
P = FindPrevious(X, L);
Position tmp;
if (!IsLast(P, L)) {
tmp = P->Next;
P->Next = tmp->Next;
free(tmp);
}
}
void Insert(int X, List L, Position P){
Position tmp = (Position)malloc(sizeof(struct Node));
if (tmp == NULL) {
printf("out of memory in fun Insert\n");
}
tmp->Element = X;
tmp->Next = P->Next;
P->Next = tmp;
}
void DeleteList(List L){
Position P, tmp;
P = L->Next;
tmp = P->Next;
while (P != NULL) {
free(P);
if (tmp == NULL) {
break;
}
P = tmp;
tmp = P->Next;
}
L->Next = NULL;
}
int main(int argc, const char * argv[])
{
List L = (List)malloc(sizeof(struct Node));
Insert(1, L, L);
Insert(3, L, L->Next);
Insert(5, L, L->Next->Next);
Print(L);
Position P = Find(3, L);
printf("%d\n",P->Element);
P = FindPrevious(3, L);
printf("%d\n",P->Element);
// Delete(2, L);
Print(L);
DeleteList(L);
Print(L);
return 0;
}
函数操作都很明显,也很简单~~
mark下,以后省的写的时候出现空指针。
相关文章推荐
- 数据结构学习二 数据结构之链表图解版【创建,遍历,删除,插入】
- 【数据结构】单链表(一)单链表的定义,插入,删除和查找操作
- 关于链表结构的基本操作 c 实现 (创建,插入删除,反转,合并链表,查找,是否有环,链表相交情况)
- 【数据结构作业二】写出单链表结点的结构体类型定义及查找、插入、删除算法,并以单链表作存储结构,实现有序表的合并
- 数据结构:头插法、尾插法创建单链表,求链表长度、查找、插入、删除、合并
- 数据结构 单链表插入删除操作(c语言实现)
- 线性表的基本操作:插入、删除、查找等操作在顺序存储结构和链接存储结构上的算法
- 【程序员面试宝典】数据结构基础二单链表循环链表的操作 建立|插入删除|打印|合并
- 【程序员面试宝典】数据结构基础一单链表:创建|求长|插入|删除|排序|打印|逆置
- 编程菜鸟的日记-初学尝试编程-顺序表的类定义及其基本操作算法(创建表、元素插入、元素删除、顺序查找、测表空、求表长、输出等)
- java实现创建链表以及插入节点,查找结点,删除节点等操作
- 数据结构——单链表的创建、删除、遍历以及节点的插入、删除等操作
- C语言之数据结构的顺序单链表创建,插入和删除操作
- 链表操作:创建,插入,删除,查找等功能
- 线性表的链式存储格式基本操作:创建链表、插入、删除、查找、求表长、打印链表
- C++ 数据结构的单链表的建立,插入,删除操作
- 学习笔记——C语言实现单链表的基本操作:创建、输出、插入结点、删除结点、逆序链表
- 数据结构基础5.2:二叉搜索树(BST)的基本操作(插入、查找、删除)
- 链表的基本操作(创建,查找指定位置元素,删除指定元素,插入,倒置,去重,求集合的差,分别交换结点与交换结点值实现的冒泡排序,将两个有序链表合并成一个有序链表)c语言实现
- 数据结构:单链表(一)的创建、插入、删除、遍历,打印