C语言--链式结构表1

来源:互联网 发布:注册中文域名有价值吗 编辑:程序博客网 时间:2024/06/04 00:44
#include <stdio.h>#include <stdlib.h>//typedef int INT;//定义一个结构体的node结点用来保存,关联数据 typedef struct node_{    struct node_ *next;INT data;}node;/**尾插法 保存最后一个数据 */static node *last;/**创建头结点 */node *create_head_node(){//创建头结点 node *n = malloc(sizeof(node));n->next = NULL;//给保存最后一个结点的指针变量开辟内存 last=malloc(sizeof(node)); last=n; //初始化时,第一个结点就是尾结点 return n;}/**头插法添加结点数据 每次都添加到第一个数据结点后面,因为第一个head结点不保存数据 故而新add的数据都在第一位,即头插法 */ void add_head(node *head,INT value){//创建新的结点,给新的结点赋值 node *n = malloc(sizeof(node));n->data=value; //新结点的下一个结点指向头结点的下一个结点   :赋值规则:为避免覆盖 从空结点开始赋值;  n->next=head->next; //头结点的下一个结点指向新的结点 head->next=n;} /**尾插法 */void add_foot(node *footer,INT value){//创建新的结点 并赋值 node *n = malloc(sizeof(node));n->data=value;n->next=NULL;last = n;//记录当前结点 //把新结点关联到尾结点 footer->next=n; }/**根据数据删除结点 */int delete(node *head,int value){node *last_=malloc(sizeof(node));while(head->next!=NULL){last_=head;//保存这个node     head=head->next;//因为第一个头node不存储值,故而可以直接到下一个 node if(head->data==value){last_->next=head->next;free(head);return 1;}}return 0;}/**根据数据插入结点   value保证在insert_value的后面 */int insert_by_value(node *head,int insert_value,int value){while(head->next!=NULL){    head=head->next;//因为第一个头node不存储值,故而可以直接到下一个 node if(head->data==insert_value){//创建新结点node *node_new=malloc(sizeof(node));node_new->data=value;node_new->next=head->next;//新结点的下一个结点指向目标结点的下一个结点 head->next= node_new;return 1;}}return 0;}/**根据从小到大的顺序排列 */int insert_by_size(node *head,int value){//创建结点赋并值 node *node_new=malloc(sizeof(node));node_new->data=value;//保存上一个结点 node *last_=malloc(sizeof(node));while(head->next!=NULL){last_=head;//保存这个node     head=head->next;if(head->data>=value){node_new->next=head;//新结点的下一个结点指向目headlast_->next=node_new;return 1;} }//如果是第一次插入 或者值比已经存在的值都大 node_new->next=NULL;  head->next=node_new;  return 1;}/**测试头插法 */  void *test_add_head(node *head){    add_head(head,22);    add_head(head,23);    add_head(head,24);    add_head(head,25);    add_head(head,26);    add_head(head,27);  }   /**测试尾插法 */  void *test_add_foot(){   add_foot(last,20);    add_foot(last,30);    add_foot(last,40);   add_foot(last,50);   add_foot(last,60);   add_foot(last,70);  }       /**测试顺序插入插法 */  void *test_insert_by_size(node *head){   insert_by_size(head,80);    insert_by_size(head,30);    insert_by_size(head,1000);   insert_by_size(head,50);   insert_by_size(head,20);   insert_by_size(head,700);  }  /**  打印数据   */   void print_data(node *head){    while(head->next!=NULL){  head=head->next; //这里从新赋值   printf("%d   ",head->data);  }  }  int main(INT argc,char *argv[]){  node *head = create_head_node();  test_insert_by_size(head);   //  test_add_foot(); //   test_add_head(head); //    int result = delete(head,40);   //  printf("result=%d   ",result);  // insert_by_value(head,60,65);  //  insert_by_value(head,40,45);    print_data(head);}

0 0
原创粉丝点击