今日开发任务 |
1.链表的分类和定义; 2.数据结构。 |
今日开发收获 |
1.链表的分类:单链表,单项循环链表,双向链表,双向循环链表(带表头,不带表头); 2.数据结构作用:管理数据(存,取,遍历,查找); 3.链表作用:解决数组带来空间消耗问题;(数组是静态分配,容易造成浪费;链表动态分配); 4。定义节点包括数据域和链接域。 |
今日开发问题汇总 | 在链表中实现数据的初始化,数据头插,尾插,中插,逆序,删除等功能只有借助图示才能看明白。 |
今日未解决问题 | 无 |
自我评价 | 单链表相对简单,双链表比较麻烦,但是过程还是比较正规的。 |
enum RESULT#include<stdio.h>
#include<stdlib.h>
{
LINK_EMPTY,
INSERT_SUCCESS,
INSERT_FAIL,
DELETE_SUCCESS,
DELETE_FAIL,
REVERSE_SUCCESS,
REVERSE_FAIL
};
struct node
{
int num;
struct node *next;
};
typedef struct node Node;
typedef Node *Link;
void create_link(Link *head)
{
*head = NULL;
};
void insert_head_node(Link newnode,Link *head)
{
if(*head == NULL)
{
newnode->next = NULL;
*head = newnode;
}
else
{
newnode->next = *head;
*head = newnode;
}
}
# if 0
int delete_node(Link *head,int num)
{
if(*head == NULL)
{
return LINK_EMPTY;
}
Link temp = *head;
if((*head)->num == num)
{
*head = (*head)->next;
free(temp);
temp = NULL;
return DELETE_SUCCESS;
}
else
{
Link p = temp;
temp = temp->next;
while(temp != NULL)
{
if(temp->num == num)
{
p->next = temp->next;
free(temp);
temp = NULL;
return DELETE_SUCCESS;
}
p = temp;
temp = temp->next;
}
return DELETE_FAIL;
}
}
# endif
int reverse_link(Link *head)
{
if(*head == NULL||(*head)->next == NULL)
{
return REVERSE_FAIL;
}
Link p = *head;
Link s = p->next;
Link t = s->next;
while(t != NULL)
{
s->next = p;
p = s;
s = t;
t = t->next;
}
s->next = p;
(*head)->next = NULL;
*head = s;
return REVERSE_SUCCESS;
}
void display_link(Link head)
{
Link temp = head;
while(temp != NULL)
{
printf("%d\n",temp->num);
temp = temp->next;
}
}
int main()
{
int i;
Link head;
Link newnode;
create_link(&head);
for(i = 0;i < 10;i++)
{
newnode = (Link)malloc(sizeof(Node));
newnode->num = i + 1;
insert_head_node(newnode,&head);
}
// delete_node(&head,5);
reverse_link(&head);
display_link(head);
return 0;
}