c - linkedlist
store ordered number in linkedlist, no repeat.
code:
linkedlist_test.c:
#include <stdio.h>
#include <stdlib.h>
extern struct linkedlist {
int num;
struct linkedlist *pnext;
};
/**
* add a num to ordered linkedlist, if it not exists yet,
*
* @param num
* the number to add
* @param start
* start of the linkedlist
*
* @return
* the start
*/
struct linkedlist *add(int num, struct linkedlist *start) {
if(start == NULL) {
start = (struct linkedlist *) malloc(sizeof(struct linkedlist));
start->num = num;
start->pnext = NULL;
} else if((start->num) < num) {
start->pnext = add(num, start->pnext);
} else if((start->num) > num) {
struct linkedlist *old_start = start;
start = (struct linkedlist *) malloc(sizeof(struct linkedlist));
start->num = num;
start->pnext=old_start;
}
return start;
}
/**
* print the linkedlist
*
* @param start
* start of the linkedlist
* @param count
used to count elements
*/
void printll(struct linkedlist *start, int count){
if(start != NULL) {
count++;
printf("%d, ",start->num);
printll(start->pnext, count);
} else {
printf("\ntotal: %d\n",count);
}
}
int main() {
int nums[] = {5,3,9,2,100,4,23,2,6,19,17,11,41,100,9,6,19}, i, n, count;
struct linkedlist *start = NULL;
n = sizeof(nums) / sizeof(nums[0]);
for(i=0;i<n;i++) {
start = add(nums[i], start);
}
count = 0;
printll(start, count);
return 1;
}

本文介绍了一个C语言实现的有序链表数据结构,该链表能够存储不重复的整数,并保持元素的升序排列。文章提供了`add`函数用于向链表中添加新的元素,并通过`printll`函数展示链表的内容及元素数量。
890

被折叠的 条评论
为什么被折叠?



