苏嵌 项目实战
学习日志 姓名:王俊 日期:7月24
|
|
今日学习任务
| 掌握单项链表的使用
|
今日任务完成情况
(详细说明本日任务是否按计划完成,开发的代码量) | 链表的分类:单链表、单向循环链表、双链表、双向循环链表
|
今日开发中出现的问题汇总
| 今天在编写链接时遇到很多不太能熟练编写程序的地方,需要自己多加的练习来熟练。 表头链表的逆序 |
今日未解决问题
| 在链接时很多不熟练,很多的东西掌握不清楚的地方。 |
今日开发收获 | 对链表有了基础的认识,能够基本的写出链表的东西。知道了自己有那些地方不足。 |
自我评价
(是否按开发规范完成既定任务,需要改进的地方,与他人合作效果等)
| 自己还需要多加的练习来掌握链表。 |
其他
| 无 |
#include <stdio.h>
#include <stdlib.h>
enum RESULT
{
LINK_EMPTRY,
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)
{
newnode->next = *head;
*head = newnode;
}
void insert_tail_node(Link newnode, Link *head)
{
if(*head == NULL)
{
newnode->next = NULL;
*head = newnode;
}
else
{
Link temp = *head;
while(temp->next != NULL)
{
temp = temp->next;
}
temp->next = newnode;
newnode->next = NULL;
}
}
int insert_mid_node(Link newnode, Link *head, int num)
{
if(*head == NULL)
{
return LINK_EMPTRY;
}
Link temp = *head;
while(temp != NULL)
{
if(temp->num == num)
{
newnode->next = temp->next;
temp->next = newnode;
return INSERT_SUCCESS;
}
temp = temp->next;
}
return INSERT_FAIL;
}
int delete_node(Link *head, int num)
{
if(*head == NULL)
{
return LINK_EMPTRY;
}
Link temp = *head;
if((temp)->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;
}
}
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()
{
Link head;
Link newnode;
create_link(&head);
int i;
for(i = 0; i < 10; i++)
{
newnode = (Link)malloc(sizeof(Node));
newnode->num = i + 1;
insert_tail_node(newnode,&head);
//insert_head_node(newnode,&head);
}
display_link(head);
#if 0
newnode = (Link)malloc(sizeof(Node));
newnode->num = 11;
insert_mid_node(newnode,&head,5);
#endif
//delete_node(&head,1);
reverse_link(&head);
display_link(head);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
enum RESULT
{
LINK_EMPTRY,
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;
*head = (Link)malloc(sizeof(Node));
(*head)->next = NULL;
}
void insert_head_node(Link newnode, Link *head)
{
newnode->next = (*head)->next;
(*head)->next = newnode;
}
void insert_tail_node(Link newnode, Link *head)
{
Link temp = *head;
while(temp->next != NULL)
{
temp = temp->next;
}
temp->next = newnode;
newnode->next = NULL;
}
int insert_mid_node(Link newnode, Link *head, int num)
{
Link temp = (*head)->next;
while(temp != NULL)
{
if(temp->num == num)
{
newnode->next = temp->next;
temp->next = newnode;
return INSERT_SUCCESS;
}
temp = temp->next;
}
return INSERT_FAIL;
}
int delete_node(Link *head, int num)
{
Link temp = *head;
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;
}
int reverse_link(Link *head)
{
if((*head)->next == NULL || (*head)->next->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->next = NULL;
(*head)->next = s;
return REVERSE_SUCCESS;
}
void display_link(Link head)
{
Link temp = head->next;
while(temp != NULL)
{
printf("%d\n",temp->num);
temp = temp->next;
}
}
int main()
{
Link head;
Link newnode;
create_link(&head);
int i;
for(i = 0; i < 10; i++)
{
newnode = (Link)malloc(sizeof(Node));
newnode->num = i + 1;
insert_tail_node(newnode,&head);
//insert_head_node(newnode,&head);
}
display_link(head);
#if 0
newnode = (Link)malloc(sizeof(Node));
newnode->num = 11;
insert_mid_node(newnode,&head,5);
#endif
//delete_node(&head,1);
reverse_link(&head);
display_link(head);
return 0;
}