动态线性单链表
来源:互联网 发布:网络博客拉人方法 编辑:程序博客网 时间:2024/05/22 10:34
#include<iostream>
using namespace std;
typedef int Elemtype;
typedef struct Lnode//此行的LNode是一个结构标签(名)
{
Elemtype data;
Lnode* next;//因为之前有了Lnode这个结构标签,因此此处可用来声明一个指针变量
}Lnode, *Linklist; //此行的LNode是结构体struct LNode的一个别名,LinkList也是结构体struct LNode*的一个别名,换言之LinkList是结构体struct LNode类型的指针的别名,
//也就是说struct LNode* p;这条语句等同于LinkList p;
void create_list(Linklist& L,Elemtype n)
{
Linklist p=L;
p->data = n;
for (int i = 0; i < n; i++)
{
p->next = (Linklist)malloc(sizeof(Lnode));
p->next->data = i;
p->next->next = NULL;
p = p->next;
}
//p->next = (Linklist)malloc(sizeof(Lnode));
}
Elemtype get_elem(Linklist l, int i)
{
int j = 1;
Elemtype elem;
Linklist p = l->next;
while (p != NULL&&j < i)
{
p = p->next;
j++;
}
if (p == NULL || j>i)
return false;
else
return p->data;
}
bool list_insert(Linklist& l,int loc,Elemtype elem)
{
Linklist p = l;
l->data++;
Linklist p1 = (Linklist)malloc(sizeof(Elemtype));
p1->data = elem;
int j = 0;
while (p!=NULL&&j<loc-1)
{
j++;
p = p->next;
}
if (p == NULL || j>loc - 1)
return false;
else
p1->next = p->next;
p->next = p1;
return true;
}
bool delete_list(Linklist& l, int loc)
{
Linklist p = l;
Linklist p1;
int j=0;
while (p != NULL&&j < loc-1)
{
j++;
p=p->next;
}
if (p == NULL || j>loc-1)
return false;
else
{
p1 = p->next;
p->next = p->next->next;
free(p1);
l->data--;
}
}
void merge_list(Linklist& l1, Linklist& l2, Linklist& l3)
{
Linklist p1 = l1->next;
Linklist p2 = l2->next;
Linklist p3 = l3;
while (p1 != NULL &&p2 != NULL)
{
if (p1->data <= p2->data)
{
p3->next = p1;
p1 = p1->next;
p3 = p3->next;
}
else
{
p3->next = p2;
p2 = p2->next;
p3 = p3->next;
}
}
p3->next = p1 == NULL ? p2 : p1;
free(l1);
free(l2);
}
int main()
{
Linklist head1=(Linklist)malloc(sizeof(Lnode));//注意指针未进行初始化时是个随机值,不能随便对该随机值对应的地址进行更改,应该为该指针指明所指地址
Elemtype l = 5;
create_list(head1, l);
Linklist head2 = (Linklist)malloc(sizeof(Lnode));
create_list(head2, 7);
Linklist head3 = (Linklist)malloc(sizeof(Lnode));
merge_list(head1, head2, head3);
Linklist p3 = head3->next;
while (p3 != NULL)
{
cout << p3->data<<' ';
p3 = p3->next;
}
return 0;
}
using namespace std;
typedef int Elemtype;
typedef struct Lnode//此行的LNode是一个结构标签(名)
{
Elemtype data;
Lnode* next;//因为之前有了Lnode这个结构标签,因此此处可用来声明一个指针变量
}Lnode, *Linklist; //此行的LNode是结构体struct LNode的一个别名,LinkList也是结构体struct LNode*的一个别名,换言之LinkList是结构体struct LNode类型的指针的别名,
//也就是说struct LNode* p;这条语句等同于LinkList p;
void create_list(Linklist& L,Elemtype n)
{
Linklist p=L;
p->data = n;
for (int i = 0; i < n; i++)
{
p->next = (Linklist)malloc(sizeof(Lnode));
p->next->data = i;
p->next->next = NULL;
p = p->next;
}
//p->next = (Linklist)malloc(sizeof(Lnode));
}
Elemtype get_elem(Linklist l, int i)
{
int j = 1;
Elemtype elem;
Linklist p = l->next;
while (p != NULL&&j < i)
{
p = p->next;
j++;
}
if (p == NULL || j>i)
return false;
else
return p->data;
}
bool list_insert(Linklist& l,int loc,Elemtype elem)
{
Linklist p = l;
l->data++;
Linklist p1 = (Linklist)malloc(sizeof(Elemtype));
p1->data = elem;
int j = 0;
while (p!=NULL&&j<loc-1)
{
j++;
p = p->next;
}
if (p == NULL || j>loc - 1)
return false;
else
p1->next = p->next;
p->next = p1;
return true;
}
bool delete_list(Linklist& l, int loc)
{
Linklist p = l;
Linklist p1;
int j=0;
while (p != NULL&&j < loc-1)
{
j++;
p=p->next;
}
if (p == NULL || j>loc-1)
return false;
else
{
p1 = p->next;
p->next = p->next->next;
free(p1);
l->data--;
}
}
void merge_list(Linklist& l1, Linklist& l2, Linklist& l3)
{
Linklist p1 = l1->next;
Linklist p2 = l2->next;
Linklist p3 = l3;
while (p1 != NULL &&p2 != NULL)
{
if (p1->data <= p2->data)
{
p3->next = p1;
p1 = p1->next;
p3 = p3->next;
}
else
{
p3->next = p2;
p2 = p2->next;
p3 = p3->next;
}
}
p3->next = p1 == NULL ? p2 : p1;
free(l1);
free(l2);
}
int main()
{
Linklist head1=(Linklist)malloc(sizeof(Lnode));//注意指针未进行初始化时是个随机值,不能随便对该随机值对应的地址进行更改,应该为该指针指明所指地址
Elemtype l = 5;
create_list(head1, l);
Linklist head2 = (Linklist)malloc(sizeof(Lnode));
create_list(head2, 7);
Linklist head3 = (Linklist)malloc(sizeof(Lnode));
merge_list(head1, head2, head3);
Linklist p3 = head3->next;
while (p3 != NULL)
{
cout << p3->data<<' ';
p3 = p3->next;
}
return 0;
}
阅读全文
0 0
- 动态线性单链表
- 动态规划----线性动态规划
- 动态线性表
- 数据结构之线性表3单链表(动态单链表)
- 线性动态规划-文件排版
- 线性结构栈----动态实现
- 简单的动态线性表
- 线性动态规划 (共六题)
- 动态规划入门 & 线性动态规划
- 数据结构之线性表的线性分配动态存储
- Extjs线性表动态确定线条个数
- 动态顺序 线性表 的实现源码
- java 用动态数组实现线性表
- 线性顺序表(动态数组实现)
- silverlight 动态线性图 自制控件
- [动态规划]花店橱窗 线性动归
- 动态规划基础学习(一)线性
- poj 1163 The Triangle 线性动态规划
- jquery新手入门教学(四)
- python中的list和array的不同之处
- JetBrains系列破解
- 微信公众号支付报错:当前的url未注册解决方法
- MFC中如何从EDIT控件中获取文字
- 动态线性单链表
- OpenStack 常用指令 --Nova
- Struts2(五)---通配符映射
- 微服务部署:蓝绿部署、滚动部署、灰度发布、金丝雀发布
- 解决无限嵌套文件夹无法删除的问题[WIN10]
- 移动端的meta标签
- TensorFlow 数据读取
- mysql批量更改表中字段的编码格式
- Python字符串操作---rstrip()方法