链表的操作
来源:互联网 发布:t123ai写软件 编辑:程序博客网 时间:2024/06/06 00:34
链表有单向链表双向链表,循环链表和不循环,还有带表头和不带表头。链表的操作步骤基本一致
以不带表头的单向不循环链表为例
1.先定义一个结构体,作为链表的节点来使用,例如:
struct node
{
char name[20];
int num;
struct node *next; //定义一个结构体指针,为了链接节点
};
typedef struct node Node;
typedef struct node * Link;
2.然后创建表头,例如:
void creat_link(Link *head)
{
*head = NULL;
}
3.创建节点
void creat_new_node(Link* new_node)
{
*new_node = (Link)malloc(sizeof(Node));
if(*new_node == NULL)
{
printf("malloc is error!\n");
exit(-1);
}
}
注:若是带表头的链表,2和3步骤要倒过来
4.插入节点,有头插或者尾插
void insert_node_head(Link *head,Link new_node) //头插
{
new_node->next = *head; //新节点的next指针指向头
*head = new_node; //头指针移到新节点
}
void insert_node_tail(Link *head,Link new_node) //尾插
{
Link p = NULL;
if(*head == NULL) //先讨论空链表,即一个节点也没有插入
{
new_node->next = *head;
*head = new_node;
}
else
{
p = *head;
while(p->next != NULL) //链表不为空,移动p指针,找到最后一个节点
{
p = p->next;
}
p->next = new_node;
new_node->next = NULL;
}
}
5.链表输出
void display_link(Link head)
{
Link p = head;
if(head == NULL)
{
printf("Link is empty!\n");
}
while(p != NULL)
{
printf("%d %s\n",p->num,p->name);
printf("\n");
p = p->next;
}
}
6.释放链表
void free_link(Link *head)
{
Link p;
while(*head != NULL)
{
p = *head; //释放链表要把头指针往后移动然后释放第一个,最后释放头指针
*head = (*head)->next;
free(p);
}
if(*head == NULL)
{
printf("释放成功!\n");
}
}
- 链表的操作
- 链表的操作
- 链表的操作
- 链表的操作
- 链表的操作
- 链表的操作
- 链表的操作
- 链表的操作
- 链表的操作
- 链表的操作
- 链表的操作
- 链表的操作
- 链表的操作
- 链表的操作
- 链表的操作
- 链表的操作
- 链表的操作
- 链表的操作
- 折线图
- Android调试usb adb进程提前
- Windows下利用JMX监控Tomcat
- Web日程管理FullCalendar
- 常用正则
- 链表的操作
- tomcat6启动出现NullPointerException ReplicationValve.java:348问题的解决
- 蓝桥杯 算法提高 8-1因式分解
- 怎样去掉SVN中的标记
- 如何使用Android系统自带的VPN服务框架
- 用户的锁定
- Spring 3.x企业实用开发实战
- Oracle千万条记录插入与查询
- Eclipse下Maven工程多模块继承和聚合创建