当前位置:编程学习 > C/C++ >>

顺序表

#include "stdio.h"
#include "stdlib.h" //该头文件包含了realloc()函数、exit
#define List_Size 100
/**
**宏定义
*/
#define ListIncrement 10
#define OK 1
#define ERROR 0
#define OVERFLOW -1
/**
*typedef 声明自定义数据类型
*/
typedef int ElemType;
typedef struct{
 ElemType *elem;
 int length;
 int listsize;
}SqList;
int InitSqList(SqList &L){//顺序表的初始化
 L.elem=new ElemType[List_Size];
 if(!L.elem) exit(OVERFLOW);
 L.length=0;
 L.listsize=List_Size;
 return OK;
}
void CreateSqList(SqList &L,int n){//建立顺序表
 int i;
 for(i=0;i<n;i++){
  scanf("%d",&L.elem[i]);
  L.length++;
 }
}
void DeastroySqList(SqList &L){//销毁顺序表,释放内存空间
 delete L.elem;
}
int SqListInsert(SqList &L,int i,ElemType x){//插入操作    ///算法是比较重要的
 int j;
 ElemType *p;
 if(i<1||i>L.length+1) return ERROR;
 if(L.length>=L.listsize){
  p=(ElemType*)realloc(L.elem,(L.listsize+ListIncrement)*sizeof(ElemType));
  if(!p) exit(OVERFLOW);
  L.elem=p;
  L.listsize=L.listsize+ListIncrement;
 }
 for(j=L.length-1;j>=i-1;j--)
  L.elem[j+1]=L.elem[j];
 L.elem[i-1]=x;
 ++L.length;
 return OK;
}
int SqListDelete(SqList &L,int i){//删除操作
 int j;
 if(i<1||i>L.length) return ERROR;
 for(j=i-1;j<L.length-1;j++)
  L.elem[j]=L.elem[j+1];
 L.length--;
 return OK;
 
}

int LocateElem(SqList L,ElemType x){//按值查找
 int i=1;
 while(i<=L.length&&L.elem[i-1]!=x) i++;
 if(i<=L.length) return i;
 else return ERROR;
}
void DispSqList(SqList L){//依次输出线性表中的所有元素
 int i;
 for(i=0;i<L.length;i++)
  printf("%d\t",L.elem[i]);
 printf("\n");
}
void main(){
 SqList L;
 int i;
 ElemType x;
 InitSqList(L);//……
 printf("please input some messages!!!\n");
 CreateSqList(L,5);
 printf("Data to be showed!!!\n");
 DispSqList(L);
 printf("请输入要插入的数:\n");
  scanf("%d",&x);
 printf("请输入要插入位置:\n");
  scanf("%d",&i);
 while(!SqListInsert(L,i,x)){
   printf("插入位置越界!!!请输入正确的插入位置:\n");
   scanf("%d",&i);
  }
 printf("插入成功!!!\n");
 DispSqList(L);
 
 printf("请输入删除数的位置:\n");
 scanf("%d",&x);
 while(!SqListDelete(L,x)){
  printf("删除位置越界!!!请输入正确的删除数的位置:\n");
  scanf("%d",&x);
 }
 printf("删除成功!!!\n");
 DispSqList(L);
 
 printf("请输入要查找的数:");
 scanf("%d",&x);
 if(!LocateElem(L,x)){
  printf("没有你要查找的数!!!");
 }else{
  printf("已查到你要找的数!!!\n");
  printf("该数在线性表中的位置:");
  printf("%d\n",LocateElem(L,x));
 }
 DeastroySqList(L);
}
 

 
作者“技术实验室”

补充:软件开发 , C语言 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,