#include <stdio.h>
#include "./lianbiao_2.h"
int main(int argc, const char *argv[])
{
Linklist* head = create_linklist();
printf("head=%p len=%d next=%p\n",head,head->data.len,head->next);
insert_linklistHead(head,100);
insert_linklistHead(head,200);
insert_linklistHead(head,300);
insert_linklistHead(head,400);
insert_linklistHead(head,400);
insert_linklistHead(head,500);
show_linklist(head);
insert_linklistweiHead(head,30);
show_linklist(head);
shan_linklistHead(head);
show_linklist(head);
charu_linklistHead(head,3,34);
show_linklist(head);
shanchu_linklistHead(head,2);
show_linklist(head);
chazhao_linklistHead(head,4);
show_linklist(head);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include "./lianbiao_2.h"
Linklist* create_linklist(void)
{
Linklist* head = (Linklist*)malloc(sizeof(Linklist));
if(NULL == head)
{
printf("投结果申请失败,链表创建失败\n");
return NULL;
}
head->data.len = 0;//头结点中链表长度要初始化为0
head->next = NULL;//头结点中的指针域要初始化为NULL
return head;
}
// 头插法插入数据
void insert_linklistHead(Linklist* head,datatype num)
{
//创建一个结点
Linklist* temp=(Linklist*)malloc(sizeof(Linklist));
if(NULL == temp)
{
printf("创建新结点失败,插入失败\n");
return;
}
//将新结点初始化
temp->data.text = num;
temp->next = NULL;
//将新的结点头插法插入链表
temp->next = head->next;
head->next = temp;
head->data.len++;
return;
}
//尾插法插入数据
void insert_linklistweiHead(Linklist* head,datatype wum)
{
//创建新结点
Linklist* temp=(Linklist*)malloc(sizeof(Linklist));
if(NULL == temp)
{
printf("创建新结点失败,插入失败\n");
return;
}
//初始化新结点
temp->data.text = wum;
temp->next=NULL;
Linklist* p =head;
while(p->next != NULL)
{
p = p->next;
}
//尾插法插入数据
temp->next = p->next;
p->next = temp;
//更新头结点中链表长度
head->data.len++;
return;
}
//头删法
void shan_linklistHead(Linklist* head)
{
if(head->next ==NULL)
{
printf("链表为空,删除失败");
return (datatype)-1;
}
Linklist* p=head->next;
head->next=p->next;
datatype num=p->next;
free(p);
p=NULL;
head->data.len--;
return num;
}
//尾删法
void wieshan_linklistHead(Linklist* head)
{
if(NULL == head->next)
{
printf("链表为空,删除失败");
return (datatype)(-1);
}
Linklist* p=head;
while(p->next->next!=NULL)
{
p=p->next;
}
datatype num = p->next->data.text;
free(p->next);
p->next=NULL;
head->data.len--;
return num;
}
//按位置插入
void charu_linklistHead(Linklist* head,int n,datatype vum)
{
Linklist* temp=(Linklist*)malloc(sizeof(Linklist));
if(NULL == temp)
{
printf("创建新结点失败,插入失败\n");
return;
}
temp->data.text = vum;
temp->next=NULL;
Linklist* p=head;
for(int i=0;i<n-1;i++)
{
p=p->next;
}
temp->next=p->next;
p->next=temp;
head->data.len++;
return;
}
//按位置删除
void shanchu_linklistHead(Linklist* head,int n)
{
if(head->next==NULL)
{
printf("链表为空,删除失败\n");
return(datatype)-1;
}
Linklist* p=head;
Linklist* q=head;
for(int i=0;i<n-1;i++)
{
p=p->next;
}
q=p->next;
p->next=q->next;
free(q);
q=NULL;
head->data.len--;
return;
}
//按位置查找
void chazhao_linklistHead(Linklist* head,int n)
{
if(head->next==NULL)
{
printf("链表为空,查询失败\n");
return(datatype)-1;
}
Linklist* p=head;
for(int i=0;i<n;i++)
{
p=p->next;
}
printf("%d\n",p->data.text);
return;
}
//遍历链表
void show_linklist(Linklist* head)
{
Linklist* p = head;
while(p->next!=NULL)
{
p= p->next;
printf("%d\t",p->data.text);
}
printf("\n");
return;
}
#ifndef __LINKLIST__
#define __LINKLIST__
typedef int datatype;//链表结点类型
typedef struct node{ //必须有名结构体,否则指针域类型不清楚
union{
datatype text;
int len;
}data; //数据域,存储有效数据,使用data的text成员
struct node *next; //指针域,存储的是下一个结点的首地址
}Linklist;
Linklist* create_linklist(void);
void insert_linklistHead(Linklist* head,datatype num);
void insert_linklistweiHead(Linklist* head,datatype wum);
void shan_linklistHead(Linklist* haed);
void charu_linklistHead(Linklist* head,int n,datatype vum);
void shanchu_linklistHead(Linklist* head,int n);
void chazhao_linklistHead(Linklist* head,int n);
#endif