0531作业 链表
结果
整体代码
主要实现
/**实现* */
#include "./linklist.h"linklist* create_linklist(datatype param){linklist* node=(linklist*)malloc(sizeof(linklist));if(NULL==node){puts("节点创建失败");}node->param=param;node->pnext=NULL;puts("结点创建成功");return node;
}
//头插
void insert_head_linklist(linklist* head,datatype param){linklist* newNode=(linklist*)create_linklist(param);newNode->pnext=head->pnext;head->pnext=newNode;head->param++;
}
//尾插
void insert_last_linklist(linklist* head,datatype param){linklist* newNode=(linklist*)create_linklist(param);linklist* p=head;while(NULL!=p->pnext){p=p->pnext;}p->pnext=newNode;newNode->pnext=NULL;head->param++;
}//遍历
void foreach_linklist(linklist* head){ linklist* p=head;puts("-------遍历-------");printf("链表总长度:");while(NULL!=p->pnext){printf("%d \n",p->param);p=p->pnext;}printf("%d \n",p->param);puts("-----------------");}//卸载堆空间
void free_null(linklist** node){printf("正在卸载%d的堆空间\n",(*node)->param);free(*node);*node=NULL;puts("已卸载堆空间");
}
//尾删
void delete_last_linklist(linklist* head){if(head == NULL || head->pnext == NULL){puts("链表为空或只有头结点");return;}linklist* p=head;while(NULL!=p->pnext->pnext){p=p->pnext;}free_null(&(p->pnext));head->param--;puts("尾删成功");
}
//头删
void delete_head_linklist(linklist* head){if(head == NULL || head->pnext == NULL){puts("链表为空或只有头结点");return;}linklist* temp=head->pnext;head->pnext=head->pnext->pnext;free_null(&temp);head->param--;puts("头删成功");
}void insert_index_linklist(linklist *head, int index, datatype num)
{if(index > head->param+1 || index <= 0){return;}linklist *p = head;for(int i=0; i<index-1; i++){p = p->pnext;}linklist *temp = (linklist*)malloc(sizeof(linklist));temp->param = num;temp->pnext = p->pnext;p->pnext = temp;head->param++;puts("按位插入成功");
}
//指定位置删除节点
void delete_index_linklist(linklist *head, int index)
{if(NULL == head->pnext || NULL == head || index > head->param+1 || index <= 0){ return;}linklist *p = head;for(int i=0; i<index-1; i++){p = p->pnext;}linklist *temp = (linklist*)malloc(sizeof(linklist));temp = p->pnext;p->pnext = temp->pnext;free_null(&temp);head->param--;puts("按位删除成功");
}