#include<stdio.h>
#include<stdlib.h>
typedef struct node{
int data;
struct node * next;
}Node;
//链表初始化
void init_list();
//链表插入
void insert_link(int ,Node *,Node *);
//根据节点值查找位置
void query_index_by_data(Node *,Node *);
//根据位置查找节点值
void query_data_by_index(Node *,Node *);
//链表打印
void print_link(Node *,Node *);
//根据节点值删除节点
void delete_link(Node *,Node *);
//链表销毁
void destory_link(Node *,Node **);
//系统初始化
void init_system();
char is_continue[0];
int main(){
Node *head,*p;
p = head = (Node *)malloc(sizeof(Node));
head->next = NULL;
int choose_method;
while(1){
init_system();
scanf("%d",&choose_method);
switch(choose_method){
case 1:
insert_link(1,p,head);
break;
case 2:
insert_link(2,p,head);
break;
case 3:
insert_link(3,p,head);
break;
case 4:
query_index_by_data(p,head);
break;
case 5:
query_data_by_index(p,head);
break;
case 6:
print_link(p,head);
break;
case 7:
delete_link(p,head);
break;
case 8:
destory_link(p,&head);
break;
case 9://退出
exit(0);
break;
default:
printf("您是不是按错了\n");
break;
}
}
}
void init_system(){
printf("请选择操作\n");
printf("1:从首部插入节点\n");
printf("2:从尾部插入节点\n");
printf("3:从指定位置追加\n");
printf("4:根据值查找节点位置\n");
printf("5:根据位置查找节点值\n");
printf("6:输出节点\n");
printf("7:删除节点\n");
printf("8:清空链表\n");
printf("9:退出\n");
}
void insert_link(int type,Node * list,Node * head){
int data,index;
while(1){
int num = 0;
printf("输入您想输入的数据\n");
scanf("%d",&data);
Node * new_node = (Node *)malloc(sizeof(Node));
new_node->data = data;
Node * p = head;
switch(type){
case 1://从首部插入数据
new_node->next = head->next;
head->next = new_node;
break;
case 2://从尾部插入数据
new_node->next = list->next;
list->next = new_node;
list=list->next;
break;
case 3:
printf("请输入您准备插入的位置\n");
scanf("%d",&index);
while(num<index&&p->next!=NULL){
p = p->next;
num++;
}
new_node->next = p->next;
p->next = new_node;
break;
}
printf("是否继续插入,输入Y/N\n");
scanf("%s",is_continue);
getchar();//清楚缓存区的符合
if(strcmp(is_continue,"N")==0){
break;
}
}
}
void query_index_by_data(Node * link,Node * head){
int data;
while(1){
int num=0,flag=-1;
printf("输入您想要查找的值\n");
scanf("%d",&data);
Node * p = link;
while(p){
if(p->data==data){
flag = 1;
break;
}
p = p->next;
num++;
}
if(flag==1){
printf("此值对应的位置是%d\n",num);
}else{
printf("此链表无对应的值\n");
}
printf("是否继续查找,输入Y/N\n");
scanf("%s",is_continue);
getchar();//清楚缓存区的符合
if(strcmp(is_continue,"N")==0){
break;
}
}
}
void query_data_by_index(Node * link,Node * head){
int index;
while(1){
int num=0;
printf("输入您想要查找的位置\n");
scanf("%d",&index);
Node * p = link;
while(p&&num<index){
p=p->next;
num++;
}
printf("此位置对应的值是%d\n",p->data);
printf("是否继续查找,输入Y/N\n");
scanf("%s",is_continue);
getchar();//清楚缓存区的符合
if(strcmp(is_continue,"N")==0){
break;
}
}
}
void print_link(Node * link,Node * head){
Node * p = head->next;
printf("链表数据:\n");
while(p->next!=NULL){
printf("%d ",p->data);
p=p->next;
}
printf("%d\n",p->data);
}
void delete_link(Node * link,Node * head){
int data;
while(1){
int flag=-1;
Node * p,* q;
printf("输入需要删除的节点值\n");
scanf("%d",&data);
p = head->next;
q = head;
while(p){
if(p->data==data){
q->next = p->next;
flag = 1;
break;
}
p = p->next;
q = q->next;
}
if(flag==1){
free(p);
printf("节点删除成功\n");
}else{
printf("此链表找不到这个值\n");
}
printf("是否继续删除,输入Y/N\n");
scanf("%s",is_continue);
getchar();//清楚缓存区的符合
if(strcmp(is_continue,"N")==0){
break;
}
}
}
void destory_link(Node * link,Node ** head){
Node * p = *head;
Node * temp;
while(p){
temp = p->next;
free(p);
p = temp;
}
printf("已经清空链表\n");
}
单向链表实现插入、删除、查询等(C语言)
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- // 折半查找 int search(int *a, int n, int key) { int min, m...
- CoreData 地址邮编, 用CoreData实现插入/删除/查询(包含结果排序,模糊查询) github:ht...