【数据结构】顺序表操作示例

#include<cstdio>
#include<iostream>
#include<cstring>
#include<string>
#include<cstdlib>
#include<climits>

#define MAXLEN 100
using namespace std;

typedef struct{
	char key[10];
	char name[20];
	int age;
}DATA;
 
typedef struct{
	DATA ListData[MAXLEN+1];
	int ListLen;
}SLType;

void SLInit(SLType *SL){
	SL->ListLen=0;
}

int SLLength(SLType *SL){
	return (SL->ListLen);
}

int SLInsert(SLType *SL, int n, DATA data){
	int i;
	if(SL->ListLen>=MAXLEN){
		cout<<"顺序表已满,不能插入结点!\n";
		return 0;
	}
	if(n<1||n>SL->ListLen-1){
		cout<<"插入元素序号错误,不能插入结点!\n";
		return 0;
	}
	for(i=SL->ListLen-1; i>=n; i--){
		SL->ListData[i+1]=SL->ListData[i]; 
	}
	SL->ListData[n]=data;
	SL->ListLen++;
	return 1;
}

int SLAdd(SLType * SL, DATA data){
	if(SL->ListLen>=MAXLEN){
		cout<<"顺序表已满,不能再添加节点!\n";
		return 0;
	}
	SL->ListData[++SL->ListLen]=data;
	return 1;
}
int SLDelete(SLType * SL, int n){
	int i;
	if(n<1||n>SL->ListLen+1){
		cout<<"删除结点序号错误,不能删除结点!\n";
		return 0;
	}
	for(i=n; i<SL->ListLen; i++){
		SL->ListData[i]=SL->ListData[i+1];
	}
	SL->ListLen--;
	return 1;
}

DATA *SLFindByNum(SLType* SL , int n){
	if(n<1||n>SL->ListLen+1){
		cout<<"结点序号错误,不能返回结点!\n";
		return NULL;
	}
	return &(SL->ListData[n]);
}

int SLFindByCont(SLType * SL , char key){
	int i ;
	for(i=1; i<=SL->ListLen; i++){
		if(strcmp(SL->ListData[i].key, key)==0){
			return i;
		}
	}
	return 0;
}

int SLAll(SLType * SL){
	int i;
	for(i=1; SL-> ListLen; i++){
		cout<<SL->ListData[i].key<<ListData[i].name<<SL->ListData[i].age<<endl;
	}
	return 0;
}

int main(){
	int i;
	SLType SL;
	DATA data;
	DATA pdata;
	char key[10];
	
	cout<<"顺序表操作演示!\n";
	SLInit(&SL);
	cout<<"初始化顺序表完成!\n";
	do{
		cout<<" 输入添加的结点(学号 姓名 年龄):";
		fflush(stdin);
		cin>>data.key>>data.name>>data.age;
		if(data.age){
			if(!SLAdd(&SL, data)){
				break;
			}
		} 
		else{
			break;
		}
	}while(1);
	cout<<"\n 顺序表中的结点顺序为: \n";
	SLAll(&SL);
	
	fflush(stdin);
	cout<<"\n要取出结点的序号: ";
	cin>>i;
	pdata=SLFindByNum(&SL, i);
	if(pdata){
		cout<<"第"<<i<<"个结点为: "<<pdata->key<<pdata->name<<pdata->age<<endl; 
	}
	
	fflush(stdin);
	cout<<"\n要查找结点的关键字: ";
	cin>>key;
	i=SLFindByCont(&SL, key);
	pdata=SLFindbyNum(&SL,i);
	if(pdata){
		cout<<"第"<<i<<"个结点为: "<<pdata->key<<pdata->name<<pdata->age<<endl; 
	}
	getch();
	return 0;
}

  

posted @ 2015-11-30 19:49  Dragonir  阅读(1465)  评论(0编辑  收藏  举报