数据结构的基本技能
1. 线性表
线性表的增删改查
#include<iostream>
#include<string.h>
using namespace std;
/*注意增删数据的移动!从1开始*/
#define MAXLEN 100 //定义最大长度
typedef struct Student_Information
{
char name[20];
char key[20];
int age;
}DATA;
typedef struct ListType
{
DATA listdata[MAXLEN];
int listenlen; //在线性表的长度
}SLType;
/**顺序表的初始化**/
void SLInit(SLType *sl)
{
sl->listenlen=0;
}
/**顺序表的长度**/
int SLLength(SLType *sl)
{
return sl->listenlen;
}
/**插入:任意节点**/
int SLinsert(SLType *sl,int n,DATA data) //在n的位置插入data
{
int i;
if(sl->listenlen>=MAXLEN){
cout<<"顺序表已满,不能插入节点!"<<endl;
return 0;
}
if(n<1||n>sl->listenlen-1){
cout<<"插入节点序号错误!"<<endl;
return 0;
}
for(i=sl->listenlen;i>=n;i--){
sl->listdata[i+1]=sl->listdata[i];
}
sl->listdata[n]=data;
sl->listenlen++;
return 1;
}
/***增加:末尾*/
int SLadd(SLType *sl,DATA data)
{
if(sl->listenlen>=MAXLEN){
cout<<"顺序表已满,不能插入节点!"<<endl;
return 0;
}
sl->listdata[++sl->listenlen]=data;
return 1;
}
/**删**/
int SLdel(SLType *sl,int n)
{
int i;
if(n<1||n>sl->listenlen+1){
cout<<"删除节点序号错误!"<<endl;
return 0;
}
for(i=n;i<sl->listenlen;i++)
{
sl->listdata[i]=sl->listdata[i+1];
}
sl->listenlen--;
return 1;
}
/**查**/
DATA *SLFindbynum(SLType *sl,int n)
{
if(n<1||n>sl->listenlen-1){
cout<<"查找节点序号错误!"<<endl;
return 0;
}
return &(sl->listdata[n]);
}
int SLFindbycont(SLType *sl,char *key) //关键字查找
{
int i;
for(i=1;i<=sl->listenlen;i++)
{
if(strcmp(sl->listdata[i].key,key)==0)
{
return i;
}
}
return 0;
}
int SLall(SLType *sl)
{
int i;
for(i=1;i<=sl->listenlen;i++)
{
cout<<"("<<sl->listdata[i].name<<" "<<sl->listdata[i].key<<" "<<sl->listdata[i].age<<")"<<endl;
}
return 0;
}
int main()
{
int i;
SLType sl;
DATA data;
DATA *pdata;
char key[10];
cout<<"顺序表操作演示!"<<endl;
SLInit(&sl);
cout<<"初始化完成!"<<endl;
do{
cout<<"输入添加的节点(姓名,学号,年龄):";
cin>>data.name>>data.key>>data.age;
if(data.age) //年龄不为0
{
if(!SLadd(&sl,data)) //添加失败
{
break;
}
}
else{
break;
}
}while(1);
cout<<"顺序表中的节点顺序为:"<<endl;
SLall(&sl);
cout<<"要取出的节点序号: ";
cin>>i;
pdata=SLFindbynum(&sl,i);
if(pdata){
cout<<"第"<<i<<"个节点为: "<<pdata->name<<" "<<pdata->key<<" "<<pdata->age<<")"<<endl;
}
SLall(&sl);
cout<<"要取出的节点关键字: ";
cin>>key;
i=SLFindbycont(&sl,key);
pdata=SLFindbynum(&sl,i);
if(pdata){
cout<<"第"<<i<<"个节点为: "<<pdata->name<<" "<<pdata->key<<" "<<pdata->age<<")"<<endl;
}
cout<<"删除第二个节点:"<<endl;
SLdel(&sl,2);
SLall(&sl);
return 0;
}
360集团公司氛围 354人发布
