为了账号安全,请及时绑定邮箱和手机立即绑定

作业社区

探索学习新天地,共享知识资源!

0 提交作业
0 布置作业
0 满分作业
得分 100
学习任务

奔跑的人生 的学生作业:

linklist.h #ifndef LINKLIST_H #define LINKLIST_H #include #include #include typedef int datatype_t; typedef struct node { datatype_t data; struct node *next; } linknode_t; extern linknode_t *create_empyt_linklist(); extern void insert_data_linklist(linknode_t *head, datatype_t data); extern void printf_data_linklist(linknode_t *head); extern void insert_tail_linklist(linknode_t *head, datatype_t data); extern void insert_order_linklist(linknode_t *head, datatype_t data); extern int is_empty_linklist(linknode_t *head); extern int delete_data_linklist(linknode_t *head, datatype_t data); extern void reverse_data_linklist(linknode_t *head); extern void clean_up_linklist(linknode_t *head); #endif //LINKLIST_H linklist.c #include "linklist.h" linknode_t *create_empyt_linklist() { linknode_t *head = NULL; head = (linknode_t *) malloc(sizeof(linknode_t)); if (NULL == head) { printf("malloc is fail!\n"); return NULL; } memset(head, 0, sizeof(linknode_t)); return head; } //头插法 void insert_data_linklist(linknode_t *head, datatype_t data) { linknode_t *temp = (linknode_t *) malloc(sizeof(linknode_t)); if (NULL == temp) { printf("malloc is fail!\n"); return; } temp->data = data; temp->next = head->next; head->next = temp; return; } //尾插法 void insert_tail_linklist(linknode_t *head, datatype_t data) { linknode_t *temp = (linknode_t *) malloc(sizeof(linknode_t)); if (NULL == temp) { printf("malloc is fail!\n"); return; } temp->data = data; linknode_t *p = head; while (p->next != NULL) { p = p->next; } temp->next = p->next; p->next = temp; return; } //有序插法 void insert_order_linklist(linknode_t *head, datatype_t data) { linknode_t *temp = (linknode_t *) malloc(sizeof(linknode_t)); if (NULL == temp) { printf("malloc is fail!\n"); return; } temp->data = data; linknode_t *p = head; while (p->next != NULL && data < p->next->data) { p = p->next; } temp->next = p->next; p->next = temp; return; } void printf_data_linklist(linknode_t *head) { linknode_t *p = head; while (p->next != NULL) { printf("%d ", p->next->data); p = p->next; } printf("\n"); return; } int is_empty_linklist(linknode_t *head) { return head->next == NULL ? 1 : 0; } int delete_data_linklist(linknode_t *head, datatype_t data) { linknode_t *p = NULL; linknode_t *q = NULL; int flag = 0; if (is_empty_linklist(head)) { return -1; } p = head; while (p->next != NULL) { if (p->next->data == data) { q = p->next; p->next = q->next; free(q); q = NULL; flag = 1; }else { p = p->next; } } if (flag == 0) { return -2; }else { printf("delete %d is successful!\n",data); return 0; } } void reverse_data_linklist(linknode_t *head) { linknode_t *p = NULL; linknode_t *q = NULL; //1.p保存第二个有效结点的地址,并且把第一个有效结点 // 的指针域设置为NULL p = head->next->next; head->next->next = NULL; //2.从p结点开始,依次使用头插法的思想, // 把p结点插入到头结点后面 while(p != NULL) { q = p->next; //保存p后面结点的地址 //把p结点存放到head结点后 p->next = head->next; head->next =p; p = q; } return ; } //清除链表,删除链表中所有结点(包括头结点) void clean_up_linklist(linknode_t *head) { //1.思路:删除前一个结点,输出后一个结点的数据 linknode_t *p = head; linknode_t *q = NULL; while(p != NULL) { q = p->next; printf_data_linklist(p); free(p); p = q; } return ; } main.c #include "linklist.c" int main() { linknode_t *head = NULL; datatype_t data; int n = 0; int res = 0; head = create_empyt_linklist(); printf("请输入你想插入的个数:\n"); scanf("%d", &n); printf("请输入%d个数\n", n); for (int i = 0; i < n; i++) { scanf("%d", &data); // insert_data_linklist(head, data); insert_tail_linklist(head,data); // insert_order_linklist(head, data); } printf_data_linklist(head); // printf("删除数据"); // printf("请输入您想要删除的数据:\n"); // scanf("%d", &data); // res = delete_data_linklist(head, data); // if (res < 0) { // printf("没有找到要删除的数据或链表数据为空!\n"); // return -1; // } // // printf_data_linklist(head); printf("逆序:\n"); reverse_data_linklist(head); printf_data_linklist(head); printf("清除:\n"); clean_up_linklist(head); return 0; } 【图片】

微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号