链表
来源:互联网 发布:美橙域名 编辑:程序博客网 时间:2024/06/12 01:28
链表(画图写相应的代码)
(初始化、显示、插入(头插、中间插、尾插)、删除、逆序)
定义结点类型、定义头指针、初始化链表、创建链表
1. 不带表头的单链表
//初始化
void init_link(Link*head)
{
*head = NULL;
}
//显示
void display_link(Linkhead)
{
Link temp = head;
while(temp != NULL)
{
printf(“%d”, temp->num);
temp = temp->next;
}
}
//头插
void insert_head_node(Linknewnode, Link *head)
{
newnode->next = *head;
*head = newnode;
}
//中间插
int insert_mid_node(Linknewnode, Link head, int num)
{
if(head == NULL)
{
return -1;
}
Link temp = head;
while(temp != NULL)
{
if(temp->num == num)
{
newnode->next = temp->next;
temp->next = newnode;
return0;
}
temp= temp->next;
}
return -1;
}
//尾插
void insert_tail_node(Linknewnode, Link *head)
{
if(*head == NULL)
{
newnode->next == NULL;
*head = newnode;
}
Link temp = *head;
while(temp->next != NULL)
{
temp = temp->next;
}
temp->next = newnode;
newnode->next = NULL;
}
//删除
int delete_node(Link*head, int num)
{
if(*head == NULL)
{
return -1;
}
Link temp = *head;
if((*head)->num == num)
{
*head = (*head)->next;
free(temp);
return0;
}
Link ptr = temp;
temp = temp->next;
while(temp != NULL)
{
if(temp->num == num)
{
ptr->next = temp->next;
free(temp);
temp = NULL;
return0;
}
ptr= temp;
temp= temp->next;
}
return -1;
}
//倒序
int reverse_link(Link*head)
{
if(*head == NULL ||(*head)->next == NULL)
{
return -1;
}
Link str = *head;
Link ptr= str->next;
Link temp = ptr->next;
while(temp != NULL)
{
ptr->next = str;
str = ptr;
ptr = temp;
temp = temp->next;
}
ptr->next = str;
(*head)->next = NULL;
*head = ptr;
}
2. 带表头的单链表
//初始化
void init_link(Link*head)
{
*head = (Link)malloc(sizeof(Node));
(*head)->next= NULL;
}
//显示
void display_link(Linkhead)
{
Link temp = head;
while(temp != NULL)
{
printf(“%d”, temp->num);
temp = temp->next;
}
}
//头插
void insert_head_node(Linknewnode, Link *head)
{
newnode->next= (*head)->next;
(*head)->next= newnode;
}
//中间插
int insert_mid_node(Linknewnode, Link head, int num)
{
Linktemp = head->next;
while(temp != NULL)
{
if(temp->num == num)
{
newnode->next = temp->next;
temp->next = newnode;
return0;
}
temp= temp->next;
}
return -1;
}
//尾插
void insert_tail_node(Linknewnode, Link *head)
{
Link temp = *head;
while(temp->next != NULL)
{
temp = temp->next;
}
temp->next = newnode;
newnode->next = NULL;
}
//删除
int delete_node(Link*head, int num)
{
if((*head)->next== NULL)
{
return -1;
}
Link temp = *head;
Link ptr = temp;
temp = temp->next;
while(temp != NULL)
{
if(temp->num == num)
{
ptr->next = temp->next;
free(temp);
temp = NULL;
return0;
}
ptr= temp;
temp= temp->next;
}
return -1;
}
//倒序
int reverse_link(Link*head)
{
if((*head)->next== NULL || (*head)->next->next == NULL)
{
return -1;
}
Link str = *head;
Link ptr= str->next;
Link temp = ptr->next;
while(temp != NULL)
{
ptr->next = str;
str = ptr;
ptr = temp;
temp = temp->next;
}
ptr->next = str;
(*head)->next->next= NULL;
(*head)->next= ptr;
}
3. 单向循环链表
//初始化
void init_link(Link*head)
{
*head = (Link)malloc(sizeof(Node));
(*head)->next= *head;
}
//显示
void display_link(Linkhead)
{
Link temp = head;
while(temp != head)
{
printf(“%d”, temp->num);
temp = temp->next;
}
}
//头插
void insert_head_node(Linknewnode, Link *head)
{
newnode->next= (*head)->next;
(*head)->next= newnode;
}
//中间插
int insert_mid_node(Linknewnode, Link head, int num)
{
Linktemp = head->next;
while(temp != head)
{
if(temp->num == num)
{
newnode->next = temp->next;
temp->next = newnode;
return0;
}
temp= temp->next;
}
return -1;
}
//尾插
void insert_tail_node(Linknewnode, Link *head)
{
Link temp = *head;
while(temp->next != *head)
{
temp = temp->next;
}
temp->next = newnode;
newnode->next = *head;
}
//删除
int delete_node(Link*head, int num)
{
if((*head)->next== *head)
{
return -1;
}
Link temp = *head;
Link ptr = temp;
temp = temp->next;
while(temp != *head)
{
if(temp->num == num)
{
ptr->next = temp->next;
free(temp);
temp = NULL;
return0;
}
ptr= temp;
temp= temp->next;
}
return -1;
}
//倒序
int reverse_link(Link*head)
{
if((*head)->next== *head || (*head)->next->next ==*head)
{
return -1;
}
Link str = *head;
Link ptr= str->next;
Link temp = ptr->next;
while(temp != *head)
{
ptr->next = str;
str = ptr;
ptr = temp;
temp = temp->next;
}
ptr->next = str;
(*head)->next->next= *head;
(*head)->next= ptr;
}
4. 双向循环链表
(你的next指向我,我的prior指向你)
//初始化
void init_link(Link*head)
{
*head = (Link)malloc(sizeof(Node));
(*head)->prior = *head;
(*head)->next = *head;
}
//显示
void display_link(Linkhead)
{
Link temp = head->next;
while(temp != head)
{
printf(“%d”, temp->num);
temp = temp->next;
}
}
//头插
void insert_head_node(Linknewnode, Link head)
{
newnode->next = head->next;
head->next->prior = newnode;
head->next = newnode;
newnode->prior = head;
}
//中间插
int insert_mid_node(Linknewnode, Link head, int num)
{
Link temp = head->next;
while(temp != head)
{
if(temp->num == num)
{
newnode->next = temp->next;
temp->next->prior = newnode;
temp->next = newnode;
newnode->prior = temp;
return0;
}
temp= temp->next;
}
return -1;
}
//尾插
void insert_tail_node(Linknewnode, Link head)
{
head->prior->next = newnode;
newnode->prior =head->prior;
newnode->next = head;
head->prior = newnode;
}
//删除
int delete_node(Link head,int num)
{
Link temp = head->next;
while(temp != head)
{
if(temp->num == num)
{
temp->prior->next =temp->next;
temp->next->prior =temp->prior;
free(temp);
temp = NULL;
return 0;
}
temp= temp->next;
}
return -1;
}
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 同时抓取带时间的logcat和kernel log的方法
- SQL高级查询——50句查询(含答案)
- Lua在vs2013的配置环境以及C++如何调用lua
- Mafia
- JavaScript--全选、全不选、反选、无刷新删除、批量删除、即点即改入库(在yii框架中操作)
- 链表
- SCPPO(十二):SQL误操作如何恢复?
- android的ImageView动画自动播放
- 六、数据库优化(上)——Mysql主从复制搭建
- Android Fragment 详解 2016 干货
- 解决Eclipse发布后到tomcat后目录下没有class文件
- mysql -- 区分apk包中,java包,android包,第三方包的方法
- 阿里___字符从键盘输入到屏幕显示过程
- Android Notification