|
|
今日学习任务
| 1、数理掌握链表的所有操作;(单链表、单向循环,双向循环链表) |
今日任务完成情况
(详细说明本日任务是否按计划完成,开发的代码量) | 1、链表:解决数组带来空间利用的问题
|
今日开发中出现的问题汇总
| 无 |
今日未解决问题
| 无 |
今日开发收获 | 今天主要学习了单链表的一些操作,因为链表分为带表头和不带表头,上午主要是写不代表头的程序,实现各个功能,在此基础上,在写带表头的,相对会轻松一点 |
自我评价
(是否按开发规范完成既定任务,需要改进的地方,与他人合作效果等)
| 完成了今天的既定任务,今天大部分时间都是在写单链表的程序,对链表有了一定的了解,但是在链表的逻辑理解上还有所欠缺,看程序能看懂,自己写还是困难,还需加强练习
|
其他
| 1、单链表不带表头的操作,实现插入,删除 ,逆序等 #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; } 2、单链表带表头 #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; } |