动态线性单链表

来源:互联网 发布:网络博客拉人方法 编辑:程序博客网 时间: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;
}
原创粉丝点击