数据结构"/>
Linux下学C语言——第十七节 数据结构
快捷键
mv 源文件名 目标文件名 //可以修改源文件名的名字
cp ../head/makefile ./ //把上层目录下的head里的makefile文件拷贝到当前目录
有头单向链表的实现
list.h
#ifndef LIST_H__
#define LIST_H__typedef int datatype;typedef struct node_st
{datatype data;struct node_st *next;
}list;list *list_create();int list_insert_at(list *,int i,datatype *);int list_order_insert(list *,datatype *);int list_delete_at(list *,int i,datatype *);int list_delete(list *,datatype *);int list_isempty(list *);void list_display(list *);void list_destroy(list *);#endif
list.c
#include <stdio.h>
#include <stdlib.h>#include "list.h"
list *list_create()
{list *me;me = malloc(sizeof(*me));if(me == NULL)return NULL;me -> next = NULL;return me;
}int list_insert_at(list *me,int i,datatype *data)
{int j= 0;list *node =me , *newnode;if(i<0)return -1;while(j<i && node != NULL){node = node ->next;j++;}if(node){newnode = malloc(sizeof(*newnode));if(newnode == NULL)return -2;newnode -> data = *data;newnode -> next = node->next;node->next = newnode;return 0;}elsereturn -3;}int list_order_insert(list *me,datatype *data)
{ list *p =me;list *q;while(p->next && p->next->data < *data)p = p->next;q = malloc (sizeof(*q));if(q == NULL)return -1;q->data = *data;q->next = p->next;p->next =q;return 0;
}int list_delete_at(list *me,int i,datatype *data)
{int j=0;list *p=me,*q;*data = -1;while(j<i&&p){p = p->next;j++;}if(p){printf("5=====\n");q = p->next;p->next = q ->next;*data = q->data;free(q);q=NULL;printf("reurn=====\n");return 0;}printf("6=====\n");return -1;
}int list_delete(list *me,datatype *data)
{list *p = me,*q;while(p->next && p->next->data != *data)p = p->next;if(p->next == NULL)return -1;else{q= p->next ;p->next = q->next;free(q);q=NULL;}return 0;
}int list_isempty(list *me)
{if(me -> next == NULL)return 0;return 1;
}void list_display(list *me)
{list *node = me -> next;if(list_isempty(me) == 0)return ;while(node != NULL){printf("%d ",node->data);node = node -> next;}printf("\n");return ;
}
void list_destroy(list *me)
{list *node ,*next;for(node = me->next;node != NULL; node = node -> next){next = node->next;free(node);}free(me);return ;
}
main.c
#include <stdio.h>
#include <stdlib.h>#include "list.h"
int main()
{list *l;datatype arr[] = {12,4,8,23,34,9,45};int i;l = list_create();if(l == NULL)exit(1);for(i=0;i<sizeof(arr)/sizeof(*arr);i++){list_order_insert(l,&arr[i]);}list_display(l);datatype value ;int err = 0;printf("1=====\n");err = list_delete_at(l,3,&value);printf("err=====\n");if(err == -1){ printf("2=====\n");exit(1);}printf("3=====\n");list_display(l);printf("%d\n",value);printf("4=====\n");#if 0datatype value = 12;list_delete(l,&value);list_display(l);#endiflist_destroy(l);}
makefile:
all:list
list:main.o list.o$(CC) $^ -o $@
clean:rm *.o list -rf
执行:
[tom@CentOS7 head]$ ./list
4 8 9 12 23 34 45
1=====
5=====
reurn=====
err=====
3=====
4 8 9 23 34 45
12
4=====
更多推荐
Linux下学C语言——第十七节 数据结构
发布评论