#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);
}
作者“技術實驗室”