#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct student{
struct student *left;
struct student *right;
char data[30];
}STU;
//遍历
void traversal(STU* stu){
STU* stu_tmp = stu;
printf("开始遍历\n");
if(stu == NULL){
printf("遍历为空\n");
}
while(stu_tmp != NULL){
printf("%s\n",stu_tmp->data);
stu_tmp = stu_tmp->right;
}
}
//新增结点
void stuadd(STU** stu){
STU* stu_tmp = *stu;
STU* stu_new;
stu_new = (STU*)malloc(sizeof(STU));
if(*stu == NULL){
printf("请输入数据\n");
scanf("%s",stu_new->data);
stu_new->left = NULL;
stu_new->right = NULL;
*stu = stu_new;
}else{
printf("请输入数据\n");
scanf("%s",stu_new->data);
while(stu_tmp->right != NULL){
stu_tmp = stu_tmp->right;
}
stu_new->left = stu_tmp;
stu_new->right = NULL;
stu_tmp->right = stu_new;
}
}
//插入
void stuinsert(STU* stu){
STU* stu_tmp = stu,*stu_new=NULL,*tmp2=NULL;
char tmp_data[30];
printf("要在那个数据后插入?\n");
scanf("%s",tmp_data);
while((stu_tmp != NULL)&&(strcmp(tmp_data,stu_tmp->data) != 0)){
stu_tmp = stu_tmp->right;
printf("ceshi");
}
if((stu_tmp == NULL)||(strcmp(tmp_data,stu_tmp->data)!=0)){
printf("没找到\n");
}else{
stu_new = (STU*)malloc(sizeof(STU));
printf("请输入要插入的数据\n");
scanf("%s",stu_new->data);
tmp2 = stu_tmp->right;
stu_new->right = tmp2;
stu_new->left = stu_tmp;
stu_tmp->right = stu_new;
}
}
//删除
void studelete(STU** stu){
char tmp_data[30];
STU *stu_del = *stu;
printf("请输入要删除的数据");
scanf("%s",tmp_data);
while((stu_del!=NULL)&&(strcmp(tmp_data,stu_del->data)!=0)){
stu_del = stu_del->right;
}
if((strcmp(tmp_data,stu_del->data)==0)){
if((stu_del->left == NULL)&&(stu_del->right == NULL)){
*stu = NULL;
}else if(stu_del->left == NULL){//头结点
*stu = stu_del->right;
stu_del->right->left = NULL;
}else if(stu_del->right == NULL){//尾结点
stu_del->left->right = NULL;
}else{//中间结点
stu_del->left->right = stu_del->right;
stu_del->right->left = stu_del->left;
}
printf("以删除\n");
}else{
printf("没找到\n");
}
}
int main()
{
STU *stu = NULL;
int item;
while(1){
printf("----------------------\n");
traversal(stu);
printf("---------0.退出--------\n");
printf("---------1.新增--------\n");
printf("---------2.插入--------\n");
printf("---------3.删除--------\n");
scanf("%d",&item);
if(item == 0){
break;
}
switch (item) {
case 1://新增
stuadd(&stu);
break;
case 2:
stuinsert(stu);
break;
case 3:
studelete(&stu);
break;
default:
break;
}
}
return 0;
}
物联网-c数据结构——2、双向链表
最新推荐文章于 2024-09-13 17:05:05 发布