C语言数据结构顺序表的操作(创建、插入、删除、查询) 您所在的位置:网站首页 c语言建立数组输入数据 C语言数据结构顺序表的操作(创建、插入、删除、查询)

C语言数据结构顺序表的操作(创建、插入、删除、查询)

2024-07-10 08:28| 来源: 网络整理| 查看: 265

*顺序表的相关操作 *创建顺序表(顺序存储) *创建数组 *在指定位置进行删除 *在指定位置进行插入 *返回指定位置的数据 *返回数据的指定位置 *遍历顺序表的数据 */

#include #include #include #include #define MAXSIZE 1024//顺序表的数据最大数目 #define NAME_SIZE 255//字符串的最大长度 #define ERROR 0 #define OK 1 typedef int Statu;//函数返回值的数据类型 typedef char *NameTye;//数据名称的数据类型 typedef int IdType;//数据的编号的数据类型 typedef struct elementtype { NameTye name;//数据的名称 IdType id;//数据的编号 }ElementType;//数据域的结构体类型 typedef struct Seq_List { ElementType *data;//顺序表指针进行动态赋储存空间 int last;//指向数据下标的指针(类似指针) }Seq_List;//顺序表的结构体类型 void Init_seqlist(Seq_List*s);//对顺序表进行初始化 Statu create_seqlist(Seq_List*s);//对顺序表进行创建 int delet_position(Seq_List*s,int i);//在指定位置进行删除 int inset_seqlist(Seq_List*s,int i,ElementType key);//在指定位置进行插入 int search_seqlist(Seq_List*s,ElementType key);//返回数据的位置(不是下标) int search_data_seqlist(Seq_List*s,int i,ElementType *x);//返回指定位置的数据 void Display_seqlist(Seq_List*s);//对顺序表进行遍历 void sort_seqlist(Seq_List*s);//对顺序表进行排序 int value_length_seqlist(Seq_List*s);//计算顺序表的长度 void main() { int i; int index;//要删除数据元素的位置 int index2;//要插入的位置 Seq_List*s;//顺序表指针 int index3;//要返回数据位置的下标 ElementType key;//要插入的数据 ElementType str;//要查询的数据 ElementType x; s=(Seq_List*)malloc(sizeof(Seq_List)); //对其进行初始化 Init_seqlist(s);//对顺序表进行创建 int result=create_seqlist(s); if(result==ERROR) { printf("顺序表创建失败:\n"); } else { printf("顺序表创建成功:\n"); printf("顺序表遍历的结果为:\n"); Display_seqlist(s); } printf("\n"); printf("顺序表的长度为%d\n",value_length_seqlist(s)); printf("对顺序表中的元素排序的结果为:\n"); sort_seqlist(s); for(i=0;ilast+1;i++) printf("[%s,%d]->",s->data[i].name,s->data[i].id); printf("\n");//换行 printf("输入要删除的数据的位置:\n"); scanf("%d",&index); int result1=delet_position(s,index); if(result1==ERROR) printf("删除指定节点失败:\n"); else { printf("删除指点位置的节点成功:\n"); printf("删除之后数据的遍历结果为:\n"); Display_seqlist(s); printf("\n"); } printf("请输入要插入的节点的名称:\n"); key.name=(NameTye)malloc(sizeof(char)*NAME_SIZE); key.id=rand()%50;//产生随机数字 scanf("%s",key.name); printf("请输入要插入的位置:\n"); scanf("%d",&index2); int result2=inset_seqlist(s,index2,key); if(result2==ERROR) { printf("在指定位置插入数据失败:\n"); } else { printf("在指定位置插入节点成功\n"); printf("插入数据之后的遍历的结果为\n"); Display_seqlist(s); printf("\n"); } printf("清输入要查找的数据:\n"); str.name=(NameTye)malloc(sizeof(char)*NAME_SIZE); str.id=rand()%50;//产生随机数字 //对数据名称指针进行动态赋存储空间 scanf("%s",str.name); int pos=search_seqlist(s,str); if(pos==ERROR) { printf("查询数据失败:\n"); } else{ printf("查询数据成功\n"); printf("要查询的数据在顺序表中的位置是%d\n",pos); } printf("请输入要返回数据位置:\n"); x.name=(NameTye)malloc(sizeof(char)*NAME_SIZE); //进行动态分配存储空间 让其能存储字符串 scanf("%d",&index3); int result3=search_data_seqlist(s,index3,&x); if(result3==ERROR) { printf("该数据在顺序表中不存在:\n"); } else { printf("查找数据成功\n"); printf("在顺序表位置为%d的数据为[%s,%d]",index3,x.name,x.id); } } void Init_seqlist(Seq_List*s) { s->data=(ElementType*)malloc(sizeof(ElementType)*MAXSIZE); //对顺序表的数组进行动态赋存储空间 s->last=-1;//last的位置是数据元素在数组中的下标 } Statu create_seqlist(Seq_List*s)//对顺序表进行创建 { int i=0;//数组的循环变量 if(s==NULL) { return ERROR;//创建失败 } char str[NAME_SIZE]; printf("请输入数据的名称:\n"); while(scanf("%s",str)!=EOF) { if(i+1==MAXSIZE) break;//跳出while循环 if(strcmp(str,"^")==0) break;//跳出循环 else { s->data[i].name=(NameTye)malloc(sizeof(char)*NAME_SIZE); strcpy(s->data[i].name,str); s->data[i].id=rand()%50;//产生随机数据 i++; s->last++;//将顺序表的指针进行自加 } } return OK; } void Display_seqlist(Seq_List*s) { int i; if(s==NULL) printf("链表为空,遍历失败!\n"); else { for(i=0;ilast+1;i++) { printf("[%s,%d]->",s->data[i].name,s->data[i].id); } } } int value_length_seqlist(Seq_List*s)//计算顺序表的长度 { return (s->last+1);//顺序表的长度为s->last的长度加一 } void sort_seqlist(Seq_List*s)//对顺序表进行排序 { int i=s->last;//需要比较的次数 int j; int flag=1; ElementType *t; t=(ElementType*)malloc(sizeof(ElementType)); while(flag) { flag=0;//判断是否继续进行循环的操作 for(j=0;jdata[j].id>s->data[j+1].id) { //递增排序 *t=s->data[j]; s->data[j]=s->data[j+1]; s->data[j+1]=*t;//交换数据 flag=1;//循环继续进行标志 } } i--;//循环次数减一 } } int delet_position(Seq_List*s,int i)//在指定位置进行删除 { int j;//循环变量 if(s->last==-1) { return ERROR;//顺序表为空 删除失败 } else if(idata[j]=s->data[j+1]; } s->last--;//顺序表的节点个数减一 return OK; } } int inset_seqlist(Seq_List*s,int i,ElementType key)//在指定位置进行插入 { int j;//循环变量 if(s->last+1>=MAXSIZE) { return ERROR; } else if(ilast;j>=i-1;j--) { s->data[j+1]=s->data[j]; } s->data[i-1]=key; s->last++;//last指针加一 return OK;//插入成功 } } int search_seqlist(Seq_List*s,ElementType key)//返回数据的位置(不是下标) { int i;//循环变量 for(i=0;ilast+1;i++) { if(strcmp(s->data[i].name,key.name)==0) { break; } } return (i==s->last+1 ? ERROR : i+1 ); } int search_data_seqlist(Seq_List*s,int i,ElementType *x)//返回指定位置的数据 { int j; //对数据的位置进行判断 if(ilast==-1) return ERROR;//顺序表为空 else { x->id=s->data[i-1].id; strcpy(x->name,s->data[i-1].name);//对字符串进行赋值 return OK;//返回数据成功 } }


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有