2016年12月21日学习总结----单向循环链表操作程序(头插,尾插,中间插入,删除,逆序)
2016-12-28 12:48
726 查看
#include <stdio.h>
#include <stdlib.h>
struct node
{
int num;
struct node *next;
};
typedef struct node Node;
typedef Node * Link;
create_head(Link *head)
{
(*head) = (Link) malloc(sizeof(Node));
(*head)->next = (*head);
}
void print_newnode(Link *head)
{
Link temp = (*head)->next;
while(temp != (*head))
{
printf("%d\n",temp->num);
temp = temp->next;
}
}
void insert_head_newnode(Link *head,Link *newnode)
{
(*newnode)->next = (*head)->next;
(*head)->next = (*newnode);
}
void insert_tail_newnode(Link *head,Link *newnode)
{
Link temp = (*head);
while(temp->next != (*head))
{
temp = temp->next;
}
temp->next = (*newnode);
(*newnode)->next = (*head);
}
void insert_mid_newnode(Link *head,Link *newnode,int num)
{
Link temp = (*head)->next;
while(temp->next != (*head))
{
if(temp->num == num)
{
(*newnode)->next = temp->next;
temp->next = (*newnode);
break;
}
temp = temp->next;
}
}
int delete_struct(Link *head,int num)
{
Link ptr = (*head);
Link temp = ptr->next;
while(temp != (*head))
{
if(temp->num == num)
{
ptr->next = temp->next;
free (temp);
temp = NULL;
return 0;
}
ptr = temp;
temp = temp->next;
}
}
int reverse_newnode(Link *head)
{
if((*head)->next == (*head) || (*head)->next->next == (*head))
{
return -1;
}
else
{
Link ptr = (*head);
Link str = ptr->next;
Link temp = str->next;
while(temp != (*head))
{
str->next = ptr;
ptr = str;
str = temp;
temp = temp->next;
}
str->next = ptr;
(*head)->next = str;
}
}
int main()
{
int i;
Link head;
create_head(&head);
Link newnode;
for(i = 0;i < 10;i++)
{
newnode = (Link) malloc(sizeof(Node));
newnode->num = (i + 1);
//insert_head_newnode(&head,&newnode);
insert_tail_newnode(&head,&newnode);
}
print_newnode(&head);
reverse_newnode(&head);
print_newnode(&head);
//delete_struct(&head,5);
//print_newnode(&head);
/*newnode = (Link) malloc(sizeof(Node));
newnode->num = 11;
insert_mid_newnode(&head,&newnode,5);
print_newnode(&head);*/
}
#include <stdlib.h>
struct node
{
int num;
struct node *next;
};
typedef struct node Node;
typedef Node * Link;
create_head(Link *head)
{
(*head) = (Link) malloc(sizeof(Node));
(*head)->next = (*head);
}
void print_newnode(Link *head)
{
Link temp = (*head)->next;
while(temp != (*head))
{
printf("%d\n",temp->num);
temp = temp->next;
}
}
void insert_head_newnode(Link *head,Link *newnode)
{
(*newnode)->next = (*head)->next;
(*head)->next = (*newnode);
}
void insert_tail_newnode(Link *head,Link *newnode)
{
Link temp = (*head);
while(temp->next != (*head))
{
temp = temp->next;
}
temp->next = (*newnode);
(*newnode)->next = (*head);
}
void insert_mid_newnode(Link *head,Link *newnode,int num)
{
Link temp = (*head)->next;
while(temp->next != (*head))
{
if(temp->num == num)
{
(*newnode)->next = temp->next;
temp->next = (*newnode);
break;
}
temp = temp->next;
}
}
int delete_struct(Link *head,int num)
{
Link ptr = (*head);
Link temp = ptr->next;
while(temp != (*head))
{
if(temp->num == num)
{
ptr->next = temp->next;
free (temp);
temp = NULL;
return 0;
}
ptr = temp;
temp = temp->next;
}
}
int reverse_newnode(Link *head)
{
if((*head)->next == (*head) || (*head)->next->next == (*head))
{
return -1;
}
else
{
Link ptr = (*head);
Link str = ptr->next;
Link temp = str->next;
while(temp != (*head))
{
str->next = ptr;
ptr = str;
str = temp;
temp = temp->next;
}
str->next = ptr;
(*head)->next = str;
}
}
int main()
{
int i;
Link head;
create_head(&head);
Link newnode;
for(i = 0;i < 10;i++)
{
newnode = (Link) malloc(sizeof(Node));
newnode->num = (i + 1);
//insert_head_newnode(&head,&newnode);
insert_tail_newnode(&head,&newnode);
}
print_newnode(&head);
reverse_newnode(&head);
print_newnode(&head);
//delete_struct(&head,5);
//print_newnode(&head);
/*newnode = (Link) malloc(sizeof(Node));
newnode->num = 11;
insert_mid_newnode(&head,&newnode,5);
print_newnode(&head);*/
}
相关文章推荐
- 观察者模式(设计模式_15)
- 线程编程之信号量
- sublime还是不如ide呀---PyCharm--blinblinbing~~~
- Tomcat数据库连接池的配置方法总结
- 第一节,Android Studio UiAutomator搭建及实例
- java通过文件路径读取该路径下的所有文件并将其放入list中
- Spring 从同一个类中的某个方法调用另一个有注解(@Transactional)的方法时,失效的解决方案
- bootstrap-table设置height后表头与内容无法对齐的问题
- 毕业设计笔记--Ubuntu 14.0.4下使用git对Mapbox进行版本控制
- LinearLayout点击效果
- windows 2008 enterprise 64位环境下iis7.5和tomcat7的整合研究
- Android studio如何快速导入项目以及提高编译速度
- qml图片显示器传参版本
- mongodb索引
- codec engine代码阅读七---codecs中的xDM,XDAIS函数解析
- 保护眼睛
- ZCMU-1622-判断数
- 为你的网站或App提供免费Https支持
- maven私有仓库快速使用指南(nexus)
- echarts基础 handleIcon 设置