/*****************************\
* 数据结构之单链表
* IDE:VS2010
\*****************************/
#include <iostream>
using namespace std;
//定义节点类型
typedef struct node
{
int data;
struct node* next;
}node;
//创建单链表
node* create()
{
node* head, *cur, *end;
head = (node*)malloc(sizeof(node));
head->data = 0;
head->next = NULL;
end = head;
int data;
while(1)
{
cout<<"请输入数据: ";
cin>>data;
if(data == 0)
break;
cur = (node*)malloc(sizeof(node));
cur->data = data;
end->next = cur;
end = cur;
end->next = NULL;
}
return head;
}
void testCreate(void)
{
node* list = create();
int count = 0;
cout<<"\n单链表:"<<endl;
while(list->next)
{
cout<<"第"<<++count<<"个数据为 "<<list->data<<endl;
list = list->next;
}
}
//获取链表长度
int getLength(node* node)
{
int count = 0;
while(node->next)
{
count++;
node = node->next;
}
return count;
}
//判断链表为满或者为空
bool isEmpty(node* node)
{
/*
另一种方法:
int len = getLength(node);
return len==0 ? true : false;
*/
if(node->next == NULL)
return true;
return false;
}
bool isFull(node* node, int max_len)
{
int len = getLength(node);
return len==max_len ? true : false;
}
//删除数据位data的节点
bool deleteNode(node* node, int data)
{
if(!isEmpty(node))
{
while(node)
{
if(node->next->data == data)//从第一个节点(不是头结点)开始
{
node->next = node->next->next;
return true;
}
node = node->next;
}
}
return false;
}
//在pos位置插入节点
bool insertNode(node* hnode, node* insert_node, int pos, int max_len)
{
if(isFull(hnode,max_len) || pos>max_len || pos<=0)
return false;
int count = 0;
while(hnode)
{
count++;
if(pos == count)
{
insert_node = hnode->next;
hnode = insert_node;
return true;
}
}
return false;
}
int main()
{
testCreate();
return 0;
}
数据结构之单链表
最新推荐文章于 2024-01-09 21:36:40 发布