快捷键
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;
}
else
return -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 0
datatype value = 12;
list_delete(l,&value);
list_display(l);
#endif
list_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=====