标签:
今天闲来无事,就打算把大一的时候写过的数据结构重温一遍,基本上我在大一之后只在单片机上用过几次顺序表和循环队列之外再就很少使用过数据结构了。
并且乘着写一下数据结构也可以熟悉熟悉vim.
首先定义单链表节点:
1 #define DataType int 2 3 struct node{ 4 DataType data; 5 struct node *next; 6 }; 7 struct node list,*p_list;
单链表这个数据结构需要一些函数来对她操作,一般需要有这些:
1.初始化函数
2.求表长函数
3.判断表空函数
4.插入元素函数
5.查找元素函数
6.取值函数(指定位置取值,取某一点前驱或者后继)
7.删除元素函数(注意要释放内存,可以是彻底删除或者是带有剪切板删除)
8.清空表函数(注意要释放内存)
9.遍历表函数
10.排序链表函数(可以是正序或者倒序或者其它方式排序)
在这里呢我只实现上述部分功能函数
1.初始化单链表,其实这个初始化单链表也就是生成一个单链表:
/* initializaing a list */ int init_list(struct node *l) { l = (struct node *)malloc(sizeof(list)); if( !l ){ printf("Initialization list is occuring error\n!"); return 0; }else{ l -> next = NULL; return 1; } }
2.求表长
1 /* getting list lenght */ 2 int get_list_len(struct node *l) 3 { 4 int total = 0; 5 struct node *n = l -> next; 6 7 while(n){ 8 total ++; 9 n = n -> next; 10 } 11 return total; 12 }
3.判断表空
/* knowing a list is empty or not! */ int know_empty_list(struct node *l) { if( l -> next ){ return 1; }else{ return 0; } }
4.插入一个节点并插入值
/* Insert a member to list existed base position. */ int insert_member(struct node *l,const int pos,DataType x) { struct node *p = l, *n = NULL; int i = 0; while( p && ( i<(pos-1) ) ){ p = p -> next; i ++; } if( !p || i>(pos-1) ){ printf("The position is illegal.\n"); return 0; } /* generating a new node.*/ n = (struct node *)malloc(sizeof(list)); if( !n ){ printf("There is not able to generate a new node.\n"); return 0; } n -> data = x; n -> next = l -> next; l -> next = n; return 1; /* Generateing a new node is successful. */ }
。。。。
标签:
原文地址:http://www.cnblogs.com/zhangte/p/5131409.html