数据结构的基本技能
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; }