您的位置:首页 > 理论基础 > 数据结构算法

数据结构之链表(一)创建,插入,删除

2012-08-05 10:57 309 查看
链表是一种十分常见的数据结构,也是非常灵活的一种数据结构,应用十分广阔,在实际工作会经常用到,尤其保存映射关系时非常方便和灵活,经典的论坛拉链结构就是一种高效的和灵活的链表结构。

#include<iostream>
using namespace std;

struct node
{
int element;
node *next;
};

//创建长度为N的链表
node *create_list(int n)
{
if(n <= 0)
{
return  NULL;
}

node *head = NULL;
node *p = new node;
if(p == NULL)
{
return NULL;
}
head = p;
while(--n)
{
node *q = new node;
if(q == NULL)
{
return NULL;
}
p->next = q;
p = q;
}
p->next = NULL;

return head;
}
//求出链表的长度
int list_length(const node* head)
{
int len = 0;
const node *p = NULL;
p = head;
while(p != NULL)
{
len++;
p = p->next;
}

return len;
}
//在第I个节点前面插入新的节点
bool insert_element(node* &head, int i, const int& element)
{
node *p = head;
int j = 0;

if(i == 1)
{
node *h = NULL;
h = new node;
if(h == NULL)
{
return false;
}
else
{
h->element = element;
h->next = head;
head = h;
return true;
}
}

while(p != NULL && j < i-2)
{
p = p->next;
j++;
}

if(p != NULL && j <= i-2)
{
node *new_node = new node;
if(new_node == NULL)
{
return false;
}
else
{
new_node->element = element;
new_node->next = p->next;
p->next = new_node;
return true;
}
}

return false;

}
//删除第i个节点
bool del_element(node* &head, int i)
{
if(i < 1)
{
return false;
}
else if(i == 1)
{
node *h = head;
head = head->next;
delete h;
return true;
}
else
{
int j = 0;
node *p = NULL;
node *t = NULL;
p = head;
while(p != NULL && j < i-1)
{
t = p;
p = p->next;
j++;
}

if(p != NULL && j <= i-1)
{
t->next = p->next;
delete p;
return true;
}

return false;
}
}

int main()
{
int n = 10;
node *head = create_list(n);
node *p = head;
int i = 0;
while(p != NULL)
{
p->element = i++;
p = p->next;
}

int e = 100;
if(insert_element(head, 11, e))
{
del_element(head, 1);
del_element(head, 5);
del_element(head, 9);
p = head;
while(p != NULL )
{
cout<<p->element<<' ';
p = p->next;
}

}

return  0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐