主函数:
#include <stdio.h>
#include "create.h"
int main(int argc, const char *argv[])
{
li_t *head;
head = CreateList();
printf("头插1到9:\n");
datatype n = 9;
while(n){
HeadInsert(head,n);
n--;
}
DisplayList(head);
printf("头删\n");
HeadDelete(head);
DisplayList(head);
printf("尾插一个12\n");
LastInsert(head,12);
DisplayList(head);
printf("尾删\n");
LastDelete(head);
DisplayList(head);
printf("在第四个位置插入55\n");
InsertList(head,4,55);
DisplayList(head);
printf("删除第四个位置元素\n");
DeleteList(head,4);
DisplayList(head);
li_t* list;
list = CreateList();
printf("直接插入排序,依次输入:3,2,5,9,6,5\n");
Insert(list,3);
Insert(list,2);
Insert(list,5);
Insert(list,9);
Insert(list,6);
Insert(list,5);
DisplayList(list);
return 0;
}
功能函数:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "create.h"
li_t* CreateList(void){
li_t *head = malloc(sizeof(li_t));
if(NULL == head){
printf("创建链表失败");
return NULL;
}
head->next = NULL;
head->msg.len = 0;
return head;
}
//头插法
void HeadInsert(li_t* head,datatype num){
//创建新结点
li_t* temp =(li_t*) malloc(sizeof(li_t));
if(NULL == temp){
printf("头插法创建结点失败");
return;
}
temp->msg.data = num;
temp->next = NULL;
temp->next = head->next;
head->next = temp;
head->msg.len++;
return ;
}
void DisplayList(li_t* head){
if(NULL == head){
return;
}
li_t *p = head;
for(; p->next !=NULL ;){
p = p->next;
printf("%d ",p->msg.data);
}
putchar(10);
return;
}
//头删
void HeadDelete(li_t *head){
if(NULL == head->next){
return;
}
li_t* temp = head->next;
head->next = temp->next;
free(temp);
temp = NULL;
head->msg.len--;
return;
}
//尾插
void LastInsert(li_t* head,datatype num){
li_t* temp = (li_t*) malloc(sizeof(li_t));
if(NULL == temp){
return;
}
//找尾结点
li_t* p = head;
while(p->next != NULL){
p = p->next;
}
temp->msg.data = num;
temp->next = NULL;
p->next = temp;
head->msg.len++;
return;
}
//尾删
void LastDelete(li_t* head){
if(NULL == head->next)
return;
li_t* p = head;
if(p->next == head)
return;
while(p->next->next != NULL)
p = p->next;
free(p->next);
p->next = NULL;
head->msg.len--;
return;
}
//按位置插入
void InsertList(li_t* head,int local,datatype num){
li_t* temp = (li_t*)malloc(sizeof(li_t));
if(NULL == temp){
return;
}
if(local<0 || local > head->msg.len){
printf("插入位置不合法");
return;
}
temp->msg.data = num;
temp->next = NULL;
int con = 0;
li_t* p = head;
if(1 == local){
temp->next = head->next;
head->next = temp;
}
else{
while(1){
p = p->next;
con++;
if(con == local-1){
temp->next = p->next;
p->next=temp;
break;
}
}
}
head->msg.len++;
return;
}
//按位置删除
void DeleteList(li_t* head,int local){
if(NULL == head->next)
return;
if(local < 0 || local > head->msg.len)
return;
int con = 0;
li_t* p = head;
if(local == 1){
li_t* temp = p->next;
head->next = temp->next;
free(temp);
}
else{
while(1){
p = p->next;
con++;
if(con == local-1){
li_t* temp;
temp = p->next;
p->next = temp->next;
free(temp);
break;
}
}
}
head->msg.len--;
return ;
}
//直接插入排序
void Insert(li_t* head,datatype num){
li_t* temp = malloc(sizeof(li_t));
if(NULL == temp){
printf("创建失败");
return;
}
temp->msg.data = num;
temp->next = NULL;
li_t* p = head;
if(NULL== head->next){
temp->next = head->next;
head->next = temp;
}else{
p = p->next;
if(num < p->msg.data){
temp->next = head->next;
head->next = temp;
}else{
while(1){
if(NULL == p->next){
temp->next = p->next;
p->next = temp;
break;
}
else if(num <= p->next->msg.data){
temp->next = p->next;
p->next = temp;
break;
}
else{
p = p->next;
}
}
}
}
head->msg.data++;
return;
}
#ifndef __createlist__
#define __createlist__
typedef int datatype;
typedef struct list{
union {
datatype data;
int len;
} msg;
struct list *next;
} li_t;
li_t* CreateList(void);
void HeadInsert(li_t* head,datatype num);
void DisplayList(li_t* head);
void HeadDelete(li_t *head);
void LastInsert(li_t* head,datatype num);
void LastDelete(li_t* head);
void InsertList(li_t* head,int local,datatype num);
void DeleteList(li_t* head,int local);
void Insert(li_t* head,datatype num);
#endif