链表的一个简单应用---目录下的文件并排序

来源:互联网 发布:詹姆斯社交软件头像 编辑:程序博客网 时间:2024/06/06 17:47
</pre><pre name="code" class="html">/*  2015-1-13  [watchmen 数据结构和算法 01-链表和数组] **  链表的一个简单应用,读取目录下的文件及子文件名并排序**  (a)  不知道这个目录下有多少个子文件和目录**  (b)  读取目录下的子目录条目.opendir 打开目录  readdir 从目录中读取一个文件项, 读取的顺序不是排列好的**   选择链表来存储是不错的选择. 动态的增加节点数, 在中途中添加新的节点. 链表方便操作*/#include <stdio.h>#include <stdlib.h>#include <assert.h>#include <dirent.h>#include <string.h>typedef struct list{char *name;struct list *next;}linknode, *linklist;linklist insert_local(linklist head, linklist newnode){assert(newnode);linklist temp = head;if(temp == NULL){//空链表head = newnode;return head;}if(strcmp(temp->name,newnode->name) > 0){//插入head处newnode->next = temp;head = newnode;return head;}linklist prev = head;temp = head->next;while(temp != NULL){//不断循环查找应该放入的位置if(strcmp(newnode->name,temp->name) > 0){prev = temp;temp = temp->next;}elsebreak;}//将新的节点放入进去newnode->next = temp;prev->next = newnode;return head;}void output(linklist head){//链表输出linklist temp = head;while(temp){printf("%s ",temp->name);temp = temp->next;}printf("\n");}int main(int argc, char *argv[]){if(argc != 2){printf("pls usage %s dir_name\n",argv[0]);exit(EXIT_FAILURE);}linklist head = NULL;DIR* dir = opendir(argv[1]);struct dirent *dp = NULL;while( (dp = readdir(dir)) != NULL){if(dp->d_name[0] == '.')continue;linklist newnode = malloc(sizeof(linknode));newnode->next = NULL;int len = strlen(dp->d_name) + 1;newnode->name = malloc(len);  //为新节点申请空间memset(newnode->name,'\0',len);//初始化 查看memset的用法strncpy(newnode->name,dp->d_name,len - 1);head = insert_local(head,newnode);output(head);//getchar();}output(head);return 0;}

0 0
原创粉丝点击