数据结构与算法:链表(源码)!

简介:

今天抽了点时间,复习了一下链表,总结了建立,删除,插入,查找的操作方法。

源码如下:

 

复制代码
#include < iostream >
using   namespace  std;

typedef 
struct  LNode 

int  data; 
struct  LNode  * next; 
}LNode,
* Llist; 

// 方法声明
LNode  * creat_head(); // 创建一个空表 
void  creat_list(LNode  * , int ); // 创建一个长度为n的线性链表 
void  insert_list(LNode  * , int , int  ); // 插入一个元素 
int  delete_list(LNode  * , int ); // 删除一个元素 

// 创建一个空链表 
LNode  * creat_head()

LNode 
* p; 

p
= (Llist)malloc( sizeof (LNode)); 

p
-> next = NULL; 

return (p); 


// 创建一个长度为n的线性链表 
void  creat_list(LNode  * head, int  n) 

LNode 
* p, * q;
int  i;
p
= head; 
for (i = 1 ;i <= n;i ++

q
= (Llist)malloc( sizeof (LNode)); 
cout
<< " data: " ;
cin
>> q -> data; 
q
-> next = NULL; 
p
-> next = q; 
= q; 



// 插入一个元素 
void  insert_list(LNode  * head, int  x, int  i ) 

int  j = 0 ;
LNode 
* p, * s; 
p
= head; 
while ((p != NULL) && (j < i - 1 )) 

p
= p -> next; 
j
++

if (p == NULL) 
exit(
0 ); 
s
= (Llist)malloc( sizeof (LNode)); 
s
-> data = x; 
s
-> next = p -> next; 
p
-> next = s; 
}

// 删除一个元素 
int  delete_list(LNode  * head, int  i) 

LNode 
* p, * q; 
int  j = 0
int  x; 
p
= head; 
while ((p != NULL) && (j < i - 1 )) 

p
= p -> next; 
j
++

if (p == NULL) 
exit(
0 ); 
q
= p -> next; 
p
-> next = q -> next; 
x
= q -> data; 
delete(q); 
return (x); 

// 输出
void  Print(LNode  * head,LNode  * p){
     
for (p = head -> next;p != NULL;) 
     { 
     cout
<< p -> data << endl; 
     p
= p -> next;
     } 
     } 
// 按序号查找
int  Find(LNode  * head,LNode  * p, int  i){
    
int  j = 0 ;
    
int  k;
    
for (p = head -> next;p != NULL;){
    j
++ ;
    
if (i == j)
    k
= p -> data;
    p
= p -> next;
    }
    
return  k;
}
// 主函数 
int  main() 

LNode 
* head, * p; 
int  find; 
int  n; 
int  x,i; 
int  b; 
int  clrscr(); 
head
= creat_head(); 
cout
<< " 请输入链表长: " << endl; 
cout
<< " n= " ;
cin
>> n; 
cout
<< " 请输入数值: " << endl; 
creat_list(head,n);
cout
<< " 您输入的链表为: " << endl; 
Print(head,p);
cout
<< " \n请输入您要插入的数:\n "
cout
<< " x= " ;
cin
>> x; 
cout
<< " \n请输入您要插入的位置:\n "
cout
<< " i= " ;
cin
>> i; 
insert_list(head,x,i); 
cout
<< " 您输入的链表为: " << endl; 
Print(head,p);
cout
<< " \n请输入您要删除的位置:\n "
cout
<< " i= " ;
cin
>> i; 
b
= delete_list(head,i);
cout
<< " 删除后的链表为: " << endl; 
Print(head,p);
cout
<< " 请输入您要查找的位置: " << endl;
cin
>> find;
cout
<< Find(head,p,find) << endl;
cout
<< " 请输入您要查找的位置: " << endl;
cin
>> find;
cout
<< Find(head,p,find) << endl;
cout
<< " 请输入您要查找的位置: " << endl;
cin
>> find;
cout
<< Find(head,p,find) << endl;
return   0 ;

复制代码

 本文转自施杨博客园博客,原文链接:http://www.cnblogs.com/shiyangxt/archive/2008/12/01/1345303.html,如需转载请自行联系原作者

相关文章
|
4天前
|
存储 算法 Go
算法学习:数组 vs 链表
算法学习:数组 vs 链表
10 0
|
4天前
|
算法 Java
[Java·算法·中等] LeetCode21. 合并两个有序链表
[Java·算法·中等] LeetCode21. 合并两个有序链表
11 2
|
7天前
数据结构 链表(第7、8天)
数据结构 链表(第7、8天)
|
8天前
|
机器学习/深度学习 传感器 算法
基于Mediapipe深度学习算法的手势识别系统【含python源码+PyqtUI界面+原理详解】-python手势识别 深度学习实战项目
基于Mediapipe深度学习算法的手势识别系统【含python源码+PyqtUI界面+原理详解】-python手势识别 深度学习实战项目
|
1天前
|
存储 算法 Java
Java数据结构与算法:线性数据结构之链表
Java数据结构与算法:线性数据结构之链表
|
4天前
|
存储 算法 Linux
【内核链表】数据结构——深入理解内核链表的概念和操作&笔记
【内核链表】数据结构——深入理解内核链表的概念和操作&笔记
【循环链表】数据结构——单向循环链表和双向循环链表操作&笔记
【循环链表】数据结构——单向循环链表和双向循环链表操作&笔记
|
7天前
|
存储
数据结构——带头双向循环链表
数据结构——带头双向循环链表
9 0
|
8天前
|
算法
【经典LeetCode算法题目专栏分类】【第7期】快慢指针与链表
【经典LeetCode算法题目专栏分类】【第7期】快慢指针与链表
|
1天前
|
C++
【洛谷 P1044】[NOIP2003 普及组] 栈 题解(递归+记忆化搜索)
**NOIP2003普及组栈问题**:给定操作数序列1到n,仅允许push(进栈)和pop(出栈)操作。目标是计算所有可能的输出序列总数。输入包含一个整数n(1≤n≤18)。示例输入3,输出5。当队列空时返回1,栈空则只能入栈,栈非空时可入栈或出栈。AC C++代码利用记忆化搜索求解。
5 1