/* * =========================================================================== * * Filename: Linklist.c * Description: * Version: 1.0 * Created: 2018年04月15日 12时49分59秒 * Revision: none * Compiler: gcc * Author: (ycs), * Company: * * =========================================================================== */ #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct _node_ { int data; struct _node_ *next;//指针 }Linklist; //创建空链表头 Linklist * create_empty() { Linklist *head; head = (Linklist*)malloc(sizeof(Linklist)); head->next = NULL; return head; } //头插法插入链表 int insert_head_Linklist(Linklist *head,int data) { Linklist * node = (Linklist*)malloc(sizeof(Linklist)); node->data = data; node->next = head->next; head->next = node; return 0; } //尾插法插入链表 int insert_tail_Linklist(Linklist *head,int data){ Linklist *tail = head; //遍历tail指针位置 while(NULL != tail->next) { tail = tail->next; } Linklist *node = (Linklist*)malloc(sizeof(Linklist)); node->data = data; //新节点插入 tail->next = node; node->next = NULL; return 0; } //顺序插入链表 int insert_order_Linklist(Linklist *head,int data){ Linklist *p = head; //遍历判断节点大小 while(NULL != p->next && data > p->next->data) p = p->next; Linklist *node = (Linklist*)malloc(sizeof(Linklist)); node->data = data; //新节点插入 node->next = p->next; p->next = node; return 0; } //删除特定节点 int del_Linklist(Linklist *head,int num){ Linklist *p = head; Linklist *delNode = NULL; int i = 0; while(p){//遍历链表 if(i == num -1 ){//找到节点 delNode = p->next; p->next = delNode->next;//链表指针指向下一个链表节点 free(delNode);//删除 } i ++; p = p->next; } } //添加特定位置节点 int add_Linklist(Linklist *head,int data,int num){ Linklist *p = head; Linklist *AddNode = (Linklist*)malloc(sizeof(Linklist)); AddNode->data = data; int i = 0; while(p){//遍历链表 if(i == num -1 ){//找到位置 AddNode->next = p->next; p->next = AddNode;//添加 } i ++; p = p->next; } } //逆序链表 int reverase_Linklist(Linklist *head){ Linklist *curent = head->next; Linklist *tmp = NULL; head->next = NULL; while(NULL != curent){//curent和tmp的偏移 tmp = curent->next; curent->next = head->next;//头插法 head->next = curent; curent = tmp; } return 0; } int print_Linklist(Linklist *head){ Linklist *p = head; while(NULL != p->next){ p = p->next; printf("data : %d ",p->data); } printf("\n"); return 0; } int main(){ int i = 0; Linklist *h = create_empty(); for(i = 0;i < 10; i ++) { //insert_head_Linklist(h,i); //insert_tail_Linklist(h,i); insert_order_Linklist(h,i); } print_Linklist(h); reverase_Linklist(h); print_Linklist(h); del_Linklist(h,3); print_Linklist(h); add_Linklist(h,7,3); print_Linklist(h); return 0; }
链表基础
猜你喜欢
转载自blog.csdn.net/yuanchunsi/article/details/79948991
今日推荐
周排行