[置顶] 链表
2016-07-27 16:34
387 查看
链表(画图写相应的代码)
(初始化、显示、插入(头插、中间插、尾插)、删除、逆序)
定义结点类型、定义头指针、初始化链表、创建链表
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;
}
(初始化、显示、插入(头插、中间插、尾插)、删除、逆序)
定义结点类型、定义头指针、初始化链表、创建链表
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;
}
相关文章推荐
- android的ImageView动画自动播放
- HDU 1175 连连看【BFS】
- 线程安全与可重入
- Mafia
- sql server 查看表的死锁和Kill 死锁进程
- 中日韩Unicode编码区间
- hdu 3264 Open-air shopping malls(圆相交面积+二分)
- Camel、Pastal、匈牙利标记法区别及联系
- Lua在vs2013的配置环境以及C++如何调用lua
- 达尔优108机械合金版键盘驱动 正式版
- SQL高级查询——50句查询(含答案)
- oc 对 html 转换
- 五、Nginx反向代理
- python 标准异常
- Eclipse 部分常见快捷键
- 阿里云oss存储使用sts时的后台处理逻辑
- Android TextView限制字数属性
- TCP/IP——socket网络编程总结
- Multiplication Table
- DES对称加密算法 CryptoUitls