1.顺序线性表的建立、插入、删除及查找。
2.具体要求:
(1)建立含n个数据元素的顺序表;
(2)可以在线性表的任意合法位置i插入一个数据元素;
(3)可以删除线性表在任意合法位置i上的一个数据元素;
(4)可以删除线性表中所有值为e的数据元素,并知道删除了几个这样的元素;
(5)可以查找第i个位置的元素;
(6)可以查找值为e的元素在线性表中的第一个位置i;
(7)可以输出该表中各元素的值;
(8)可以输出顺序表的长度(即数据元素的个数);
建立工程
Header Files:<SqList.h>
#ifndef SQLIST_H #define SQLIST_H #define MAXSIZE 30 //定义线性表的最大长度 typedef int ElemType; //线性表中存放整型元素 typedef struct{ ElemType elem[MAXSIZE]; //线性表 int length; // length指示当前线性表的长度 }SqList; void initial(SqList &); //初始化线性表 void print(SqList &); //输出函数 bool insert(SqList &,int,int); //插入元素 bool del(SqList &,int ,int & ); //删除元素 int locate(SqList ,int ); //查找 #endif
Sourse Flies:
主函数文件:<main.cpp>
#include <stdio.h> #include <SqList.h> void main() { SqList S; //S为一线性表 int loc,e,flag=1; char j; bool temp; initial(S); //初始化线性表 while(flag) { printf("请选择:\n"); printf("1.显示所有元素 2.插入一个元素 3.删除一个元素 4.查找一个元素\n"); printf(" 5.退出程序 \n"); scanf(" %c",&j); switch(j){ case ‘1‘:print(S); break; //显示所有元素 case ‘2‘: { printf("请输入要插入的元素(一个字符)和插入位置:\n"); printf("格式:位置,整数;例如:1,-2\n"); scanf(" %d,%d",&loc,&e); //输入要插入的元素和插入的位置 temp=insert(S,loc,e); //插入 if(temp==false) printf("插入失败!\n"); //插入失败 else {printf("插入成功!\n"); print(S);} //插入成功 break; } case ‘3‘: { printf("请输入要删除元素的位置:"); scanf("%d",&loc); //输入要删除的元素的位置 temp=del(S,loc,e); //删除 if(temp==true) printf("删除了一个元素:%d\n",e); //删除成功 else printf("该元素不存在!\n"); //删除失败 print(S); break; } case ‘4‘: { printf("请输入要查找的元素:"); scanf(" %d",&e); //输入要查找的元素 loc=locate(S,e); //定位 if(loc!=-1) printf("该元素所在位置:%d\n",loc+1); //显示该元素位置 else printf("%d 不存在!\n",e); //当前元素不存在 break; } default:flag=0;printf("程序结束,按任意键退出!\n"); } getchar(); } }
函数实现:<Sqlist.cpp>
#include "stdio.h" #include "SqList.h" void initial(SqList &v) //初始化线性表 { int i; printf("请输入初始线性表长度:n="); //输入线性表初始化时的长度 scanf("%d", &v.length); printf("请输入从1到%d的各元素(整数)\n",v.length); getchar(); for(i=0; i<v.length; i++) scanf("%d",&v.elem[i]); //输入线性表的各元素 } void print(SqList &v) { int i; for(i=0; i<v.length; i++) printf("%d\n",v.elem[i]); } bool insert(SqList &v,int loc,int e) //插入一个元素,成功返回True,失败返回False { int i; if((loc<1)||(loc>v.length+1)) { printf("插入位置不合理!\n"); //位置不合理 return false; } else if(v.length>=MAXSIZE) //线性表已满 { printf("线性表已满!\n"); return false; } else { for(i=v.length-1;i>=loc-1;i--) v.elem[i+1]=v.elem[i]; //其后元素依次后移 v.elem[loc-1]=e; //插入元素 v.length++; //线性表长度加一 return true; } } bool del(SqList &v,int loc,int &e) { //删除一个元素,成功返回True,并用ch返回该元素值,失败返回False int j; if(loc<1||loc>v.length) return false; //删除位置不合理 else { e=v.elem[loc-1]; //e取得该元素值 for(j=loc-1;j<=v.length-1;j++) v.elem[j]=v.elem[j+1]; //其后元素依次前移 v.length--; //线性表长度减一 return true; } } int locate(SqList v,int e) { //在线性表中查找ch的位置,成功返回其位置,失败返回-1 int i=0; while(i<v.length&&v.elem[i]!=e) i++; //当前位置后移,直到找到为止 if(v.elem[i]==e) return i; //找到当前元素 else return(-1); }
一般采用动态实现数据存储。数组的好处,直接给出下标即可找到下标相应的数据。下标为零位置不再存储数据。
时间: 2024-10-13 00:16:13