评论

收藏

[C++] C语言单链表简单实现(简单程序复杂化)

编程语言 编程语言 发布于:2021-07-26 14:05 | 阅读数:441 | 评论:0

PS: goto还是很好玩的。 
#include <stdio.h>
#include <stdlib.h>
typedef struct _node{
  int value;
  struct _node *next;
} Node;
typedef struct _list{
  Node* head;
}List;
void add(List* plist,int number);
void print(List* list);
void deletel(List* list,int number);
void freel(List* list);
int main(int argc, char *argv[]) {
  Node *head = NULL;
  List list;
  int number=0;
  list.head=NULL;
  for(;;){
  printf("\n这是一个链表,现有如下功能  1.添加节点  2.遍历链表  3.查找并删除节点  4.释放链表 5.退出程序 \n请输入你想要进行的操作的选项:\n" ); 
  out:
  scanf("%d",&number);
  switch(number){
    case 1:
      printf("你选择了添加节点\n请输入添加节点的值,输入-1结束添加\n");
      do{
        scanf("%d",&number);
        if(number != -1){
          //添加一个新的节点挂载。 
          add(&list,number);
        }
      }while(number != -1);
      printf("添加完毕");       
      break; 
    case 2:
      printf("你选择了遍历链表\n");
      //打印链表 
      print(&list); 
      break; 
    case 3:
      printf("你选择了查找并删除节点,请输入节点数据\n");
      scanf("%d",&number);
      //删除一个节点 
      deletel(&list,number); 
      break; 
    case 4:
      printf("你选择了释放链表");
      //释放链表 
      freel(&list); 
      printf("释放完毕"); 
      break; 
    case 5:
      goto end; 
    default :
      printf("输入错误,请重新输入\n");
      goto out;
    }
  }
  end:
  printf("拜拜"); 
  return 0;
}
void add(List* plist,int number){
  Node *p =(Node*)malloc(sizeof(Node));
  p->value =number;
  p->next =NULL;
  Node *last =plist->head;
  if(last){
    while(last->next){
      last = last->next;
    }
    last->next=p;
  }else{
    plist->head = p;
  }
}
  //遍历链表 
void print(List* list){
  Node *p;
  for(p=list->head;p;p=p->next){
    printf("%d\t",p->value);
  }
  printf("\n");
}
  //查找并删除节点
void deletel(List* list,int number){
  Node* p;
  int isFound =0;
  for(p=list->head;p;p=p->next){
    if(p->value==number){
      printf("找到了\n");
      isFound = 1;
      break ; 
    }
  }
    if(!isFound){
    printf("没找到"); 
    }
    Node *q;
  for(q=NULL,p=list->head;p;q=p,p=p->next){
    if(p->value==number){
      if(q){
      q->next = p->next;
    }else{
      list->head=p->next;
    }
      free(p);
      printf("已经删除"); 
      break ;
    }
  } 
}
  //释放链表 
void freel(List* list){
  Node *q;
  Node* p;
  for(p=list->head;p;p=q){
  q=p->next;
  free(p);
  } 
}
读书和健身总有一个在路上

作者:我要去西藏
本文版权归作者和博客共有,欢迎转载,但未经作者同意必须在文章页面给出原文链接,否则保留追究法律责任的权利。


关注下面的标签,发现更多相似文章