链表
#include <stdio.h>
#include "./03_linklist.h"
int main(int argc, const char *argv[])
{
Linklist* head =cj_linklist();
toucha_linklist(head,80);
toucha_linklist(head,27);
toucha_linklist(head,59);
toucha_linklist(head,18);
bl_linklist(head);
weicha_linklist(head,800);
weicha_linklist(head,270);
weicha_linklist(head,590);
weicha_linklist(head,180);
bl_linklist(head);
toushan_linklist(head);
bl_linklist(head);
weishan_linklist(head);
bl_linklist(head);
wzcr_linklist(head,1,2718);
bl_linklist(head);
wzsc_linklist(head,1);
bl_linklist(head);
printf("--------------------------------------\n");
Linklist* temp =cj_linklist();
charupaixu_linklist(temp,27);
charupaixu_linklist(temp,18);
charupaixu_linklist(temp,59);
charupaixu_linklist(temp,69);
charupaixu_linklist(temp,80);
bl_linklist(temp);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include "./03_linklist.h"
Linklist* cj_linklist(void)
{
Linklist* head = malloc(sizeof(Linklist));//创建带头结点的单链表
if(head == NULL )
{
printf("头结点申请失败,创建单链表失败\n");
return NULL;
}
head->text.len = 0;
head->next = NULL;
return head;
}
int toucha_linklist(Linklist* head ,Datatype num)//头插法插入数据
{
Linklist* temp = (Linklist* )malloc(sizeof(Linklist));//创建新的节点
if(NULL ==temp)
{
printf("头插失败\n");
return -1;
}
temp->text.data = num;
temp->next = NULL;
temp->next = head->next;
head->next = temp;
head->text.len++;
return 0;
}
int weicha_linklist(Linklist* head,Datatype num)//尾插法插入数据
{
Linklist* temp = (Linklist* )malloc(sizeof(Linklist));//创建新的节点
if(NULL ==temp)
{
printf("尾插失败\n");
return -1;
}
temp->next = NULL;
temp->text.data = num;
Linklist *p = head;
while(p->next != NULL)
{
p = p->next;
}
p->next = temp;
temp->next = NULL;
}
int pankong_linklist(Linklist* head)//判空
{
return head->next == NULL?1:0;
}
int toushan_linklist(Linklist* head )//头删法删除数据
{
if(pankong_linklist(head))
{
printf("头删失败,链表为空\n");
return(Datatype)-1;
}
Linklist* temp = head->next;
head->next = head->next->next;
free(temp);
temp = NULL;
head->text.len--;
}
Datatype weishan_linklist(Linklist* head)
{
if(pankong_linklist(head))
{
printf("链表为空,尾删失败\n");
return (Datatype)-1;
}
Linklist* temp = head;
while(temp->next->next !=NULL)
{
temp = temp->next;
}
free(temp->next);
temp->next = NULL;
head->text.len;
}
void wzcr_linklist(Linklist* head, int pos, Datatype num)//按位置插入
{
if( pos<1 || pos> head->text.len)
{
printf("插入位置非法\n");
}
int i;
Linklist* p = head;
for(i=0;i<pos-1;i++)
{
p = p->next;
}
Linklist* temp = (Linklist* )malloc(sizeof(Linklist));
if(temp == NULL)
{
printf("插入失败,链表为空\n");
}
temp->text.data = num;
temp->next = NULL;
temp->next = p->next;
p->next = temp;
head->text.len++;
}
Datatype wzsc_linklist(Linklist* head, int pos)//按位置删除
{
if(pankong_linklist(head))
{
printf("链表为空\n");
}
if( pos<1 || pos> head->text.len)
{
printf("删除位置非法\n");
return (Datatype)-1;
}
Linklist* p;
int i;
for(i=0;i<pos-1;i++)
{
p = p->next;
}
Linklist* temp = p->next;
p->next = temp->next;
Datatype num = head->text.data;
free(temp);
temp = NULL;
head->text.len--;
return num;
}
void charupaixu_linklist(Linklist* head,Datatype num)//直接插入排序
{
Linklist* temp = (Linklist*)malloc(sizeof(Linklist));//创建带头结点的单链表
if(temp == NULL )
{
printf("头结点申请失败,创建单链表失败\n");
return ;
}
temp->text.data = num;
temp->next = NULL;
Linklist*p = head;
while(p->next != NULL)
{
if(p->next->text.data > temp->text.data )
break;
else
{
p = p->next;
}
}
temp->next = p->next;
p->next = temp;
(head->text.len)++;
return;
}
void bl_linklist(Linklist* head)//遍历链表
{
Linklist* p = head;
while(p->next != NULL)
{
p = p->next;
printf("%d ", p->text.data);
}
putchar(10);
return;
}
#ifndef __LINKLIST_H__
#define __LINKLIST_H__
typedef int Datatype;
union msg
{
Datatype data;
int len;
};
typedef struct node
{
union msg text;
struct node* next;
}Linklist;
Linklist* cj_linklist(void);
int toucha_linklist(Linklist* head, Datatype num);
void bl_linklist(Linklist* head);
int weicha_linklist(Linklist* head,Datatype num);
int toushan_linklist(Linklist* head);
void bl_linklist(Linklist* head);
Datatype weishan_linklist(Linklist* head);
void wzcr_linklist(Linklist* head, int pos, Datatype num);
Datatype wzsc_linklist(Linklist* head, int pos);
void charupaixu_linklist(Linklist* head,Datatype num);
#endif
makefile
-include ./makefile.cfg
$(Target):$(Obj)
$(CC) $^ -o $@
%.o:%.c
$(CC) $< $(CAN) $@
.PHONY:clean
clean:
rm $(Obj)
Target:=a.out
Obj:=01_main.o 02_linklist.o
CAN:=-c -o
CC:=gcc