#include
#include
//封装链表的数据类型
typedef int DATATYPE;
//创建链表的结构体
typedef struct node
{
DATATYPE data;
struct node *next;
}LinkList;
//创建一个只有表头空链表
LinkList *create_empty_linklist()
{
struct node *head;
head = (struct node *)malloc(sizeof(struct node));
head->next = NULL;
return head;
}
//头插法,插入数据到链表中 效率高,但是插入的数据都是倒序的
int insert_head_linklist(LinkList *head,DATATYPE data)
{
struct node *temp;
temp = (struct node *)malloc(sizeof(struct node));
temp->data = data;
temp->next = head->next;
head->next = temp;
return 0;
}
//尾插法,插入数据岛链表中 插入的数据是正序的 但是每次插入都会遍历一次链表
int insert_tail_linklist(LinkList *head,DATATYPE data)
{
struct node *p = head;
struct node *temp;
temp = (struct node *)malloc(sizeof(struct node));
temp->data = data;
temp->next = NULL;
//找到尾部节点
while(p->next != NULL) p = p->next;
//插入
p->next = temp;
return 0;
}
//顺序插入 每次插入都会比较data的值,来进行相应的插入
int insert_order_linklist(LinkList *head,DATATYPE data)
{
struct node *temp = NULL;
struct node *p = head;
//找到合适的节点
while(p->next != NULL && p->next->data < data)
{
p = p->next;
}
temp = (struct node *)malloc(sizeof(struct node));
temp->data = data;
temp->next = p->next;
p->next = temp;
return 0;
}
//输出链表
int printf_linklist(LinkList *head)
{
struct node *p = head->next;
while(p)
{
printf("%d ",p->data);
p = p->next;
}
printf("\n");
return 0;
}
//主函数 实现 创建链表 顺序插入 输入链表的功能
int main(int argc, const char *argv[])
{
int i = 0;
int a[] = {1,8,4,7,8,2};
LinkList *L = create_empty_linklist();
for(i = 0;i < sizeof(a)/sizeof(a[0]);i ++)
{
insert_order_linklist(L,a[i]);
}
printf_linklist(L);
return 0;
}
以上是一个简单的单向链表,在实际运用中考虑到效率很多都用上了链表,如果不太考虑效率,数组也是可以的...
阅读(525) | 评论(0) | 转发(0) |