Chinaunix首页 | 论坛 | 博客
  • 博客访问: 685762
  • 博文数量: 152
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1793
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-12 12:26
个人简介

相信自己,只有不想做的,没有做不到的。

文章分类

全部博文(152)

文章存档

2021年(1)

2015年(2)

2014年(74)

2013年(75)

分类: LINUX

2013-10-27 21:07:36

#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;
}


以上是一个简单的单向链表,在实际运用中考虑到效率很多都用上了链表,如果不太考虑效率,数组也是可以的...
阅读(485) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~