苏嵌 项目实战
学习日志 姓名:吴孝宇 日期:7.24
|
|
今日学习任务
| 今天学的知识点很集中,就是深入的讲解了链表的创建,头插入,尾插入,中间插入,删除节点,以及逆序。 |
今日任务完成情况
(详细说明本日任务是否按计划完成,开发的代码量) | 今天完成了单项链表的创建,插入和删除,逆序。还有还区别了有头结点和无头结点的链表区别。 |
今日开发中出现的问题汇总
| 无 |
今日未解决问题
| 无 |
今日开发收获 | 今天学会了链表的定义,创建,节点的插入,节点的删除,以及节点的逆序。,以及有头结点和无头结点的链表的差别。 |
自我评价
(是否按开发规范完成既定任务,需要改进的地方,与他人合作效果等)
| 今天学习过程中,学到了真的很多,老师对我们讲解了C语言平常自己总结不到的地方知识点。很有用也学到了许多。对一些C语言的整体框架以及一些知识点的用法进一步扩展。
|
其他
| 今天学习过程中,学到了真的很多,老师对我们讲解了C语言平常自己总结不到的地方知识点。很有用也学到了许多。对一些C语言的整体框架以及一些知识点的用法进一步扩展。 |
#include<stdio.h>
#include<stdlib.h>
struct node
{
int num;
struct node *next;
};
typedef struct node Node;
typedef Node * Link;
enum node_node
{
LINK_EMPTY,
SUCCESS,
FAIL,
DELETE_SUCCESS,
DELETE_FAIL,
RESEVER_SUCCESS,
RESEVER_FAIL
};
void creat_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;
}
}
void display_link(Link head)
{
Link temp = head;
while(temp != NULL)
{
printf("%d\n",temp->num);
temp = temp->next;
}
}
void insert_tail_node(Link newnode, Link *head)
{
Link temp2 = *head;
if( *head == NULL)
{
newnode->next = NULL;
*head = newnode;
}
else
{
while( temp2->next != NULL)
{
temp2 = temp2->next;
}
newnode->next = NULL;
temp2->next = newnode;
}
}
int insert_mid_node(Link newnode,Link *head,int num)
{
if( *head == NULL)
{
return LINK_EMPTY;
}
else
{
Link temp3 = *head;
while( temp3 != NULL)
{
if(temp3->num == num)
{
newnode->next = temp3->next;
temp3->next = newnode;
return SUCCESS;
}
temp3 = temp3->next;
}
return FAIL;
}
}
int delete_node(Link *head,int num)
{
Link temp = *head;
if( *head == NULL)
{
return LINK_EMPTY;
}
while( *head != NULL)
{
if( temp->next == NULL)
{
temp = temp->next;
free(temp);
temp = NULL;
return DELETE_SUCCESS;
}
else
{
Link p = temp;
temp = temp->next;
if(temp->num == num)
{
p->next = temp->next;
free(temp);
temp = NULL;
return DELETE_SUCCESS;
}
p = temp;
temp = temp->next;
}
}
return DELETE_FAIL;
}
int resever_node(Link *head)
{
if( *head == NULL || (*head)->next == NULL)
{
return RESEVER_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 RESEVER_SUCCESS;
}
int main()
{
int i;
Link head;
Link newnode;
creat_Link(&head);
for(i = 0 ; i < 10 ; i++)
{
newnode = (Link)malloc(sizeof(Node));
newnode->num = i + 1;
insert_head_node(newnode,&head);
//insert_tail_node(newnode,&head);
}
display_link(head);
printf("-----------------------\n");
// delete_node(&head,5);
resever_node(&head);
display_link(head);
#if 0
printf("-----------------------\n");
newnode = (Link)malloc(sizeof(Node));
newnode->num = 100;
if(insert_mid_node(newnode,&head,5) == SUCCESS)
{
display_link(head);
}
else
{
printf("link is full or not find\n");
}
#endif
return 0;
}