学习日志 姓名:张一林 日期:07.24
|
|
今日学习任务
| 链表(链表的写法,单链表(有表头的,无表头的)) 插入结点(头插,尾插,中间插入) 删除结点 逆序 |
今日任务完成情况
(详细说明本日任务是否按计划完成,开发的代码量) | 链表(链表的写法,单链表(有表头的,无表头的)) 插入结点(头插,尾插,中间插入) 删除结点 逆序 |
今日开发中出现的问题汇总
| 无 |
今日未解决问题
| 无 |
今日开发收获 | 今天主要是把单链表的知识和写法教了一遍,对于如何编写,需要掌握的是如何编写链表,如何插入结点,插入结点又分头插,尾插,中间插入;接着还有如何删除一个结点以及链表的逆序 |
自我评价
(是否按开发规范完成既定任务,需要改进的地方,与他人合作效果等)
| 今天主要是把单链表的知识和写法教了一遍,对于如何编写,需要掌握的是如何编写链表,如何插入结点,插入结点又分头插,尾插,中间插入;接着还有如何删除一个结点以及链表的逆序 |
其他
| 无
|
1. #include<stdio.h>
struct node
{
int num;
struct node *next;
};
int main()
{
struct node *p1 = (struct node *)malloc(sizeof(struct node));
struct node *p2 = (struct node *)malloc(sizeof(struct node));
struct node *p3 = (struct node *)malloc(sizeof(struct node));
p1->num = 1;
p1->next = p2;
p2->num = 2;
p2->next = p3;
p3->num = 3;
p3->next = NULL;
struct node *head = p1;
while(head != NULL)
{
printf("%d\n",head->num);
head = head->next;
}
// printf("p2.num = %d\n",p2.num);
return 0;
}
2. #include<stdio.h>
struct node
{
int num;
struct node *next;
};
typedef struct node Node;
typedef Node * link;
void creat_link(link *head)
{
*head = NULL;
}
void insert_head_link(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;
}
}
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_link(newnode,&head);
}
display_link(head);
return 0;
}
3. #include<stdio.h>
struct node
{
int num;
struct node *next;
};
typedef struct node Node;
typedef Node * link;
void creat_link(link *head)
{
*head = NULL;
}
void insert_tail_link(link newnode,link *head)
{
link temp = *head;
if(*head == NULL)
{
newnode->next = NULL;
*head = newnode;
}
else
{
while(temp->next != NULL)
{
temp = temp->next;
}
temp->next = newnode;
newnode->next = NULL;
}
}
void display_link(link head)
{
link temp1 = head;
while(temp1 != NULL)
{
printf("%d\n",temp1->num);
temp1 = temp1->next;
}
}
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_tail_link(newnode,&head);
}
display_link(head);
return 0;
}
4. #include<stdio.h>
enum m
{
EMPTY = 0,
INSERT_FAIL,
INSERT_SUCCESS
};
struct node
{
int num;
struct node *next;
};
typedef struct node Node;
typedef Node * link;
void creat_link(link *head)
{
*head = NULL;
}
int insert_mid_link(link newnode,link *head,int num)
{
link temp = *head;
if(*head == NULL)
{
return EMPTY;
}
else
{
while(temp != NULL)
{
if(temp->num == num)
{
newnode->next = temp->next;
temp->next = newnode;
return INSERT_SUCCESS;
}
temp = temp->next;
}
return INSERT_FAIL;
}
}
void insert_tail_link(link newnode,link *head)
{
link temp = *head;
if(*head == NULL)
{
newnode->next = NULL;
*head = newnode;
}
else
{
while(temp->next != NULL)
{
temp = temp->next;
}
temp->next = newnode;
newnode->next = NULL;
}
}
void display_link(link head)
{
link temp1 = head;
while(temp1 != NULL)
{
printf("%d\n",temp1->num);
temp1 = temp1->next;
}
}
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_tail_link(newnode,&head);
}
display_link(head);
newnode = (link)malloc(sizeof(Node));
newnode->num = 11;
int result = insert_mid_link(newnode,&head,6);
if(result == INSERT_SUCCESS)
{
display_link(head);
}
if(result == INSERT_FAIL)
{
printf("fail\n");
}
if(result == EMPTY)
{
printf("empty\n");
}
return 0;
}
5. #include<stdio.h>
enum RESULT
{
INSERT_EMPTY,
DELETE_SUCCESS,
DELETE_FAIL
};
struct node
{
int num;
struct node *next;
};
typedef struct node Node;
typedef Node * link;
void creat_link(link *head)
{
*head = NULL;
}
void insert_link(link newnode,link *head)
{
if(*head == NULL)
{
newnode->next = NULL;
*head = newnode;
}
else
{
newnode->next = *head;
*head = newnode;
}
}
int delete(link *head,int num)
{
if(*head == NULL)
{
return INSERT_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;
}
}
void display(link head)
{
link temp = head;
while(temp != NULL)
{
printf("%d\n",temp->num);
temp = temp->next;
}
}
int main()
{
int i;
link head;
creat_link(&head);
link newnode;
for(i = 0;i < 10;i++)
{
newnode = (link)malloc(sizeof(Node));
newnode->num = i + 1;
insert_link(newnode,&head);
}
display(head);
int result = delete(&head,12);
if(result == INSERT_EMPTY)
{
printf("empty!\n");
}
if(result == DELETE_SUCCESS)
{
display(head);
}
if(result == DELETE_FAIL)
{
printf("fail!\n");
}
return 0;
}
6. #include<stdio.h>
enum RESULT
{
REVERSE_SUCCESS,
REVERSE_FAIL
};
struct node
{
int num;
struct node *next;
};
typedef struct node Node;
typedef Node * link;
void creat_link(link *head)
{
*head = NULL;
}
void insert_link(link newnode,link *head)
{
if(*head == NULL)
{
newnode->next = NULL;
*head = newnode;
}
else
{
newnode->next = *head;
*head = newnode;
}
}
/*
int delete(link *head,int num)
{
if(*head == NULL)
{
return INSERT_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;
}
}
*/
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 head)
{
link temp = head;
while(temp != NULL)
{
printf("%d\n",temp->num);
temp = temp->next;
}
}
int main()
{
int i;
link head;
creat_link(&head);
link newnode;
for(i = 0;i < 10;i++)
{
newnode = (link)malloc(sizeof(Node));
newnode->num = i + 1;
insert_link(newnode,&head);
}
display(head);
//int result = delete(&head,12);
int result = reverse_link(&head);
if(result == REVERSE_SUCCESS)
{
display(head);
}
if(result == REVERSE_FAIL)
{
printf("fail!\n");
}
return 0;
}