数据结构C语言版--静态顺序表的基本功能实现(一)

/* * 功能:创建一个线性表,并输出 * 静态分配内存 */ #include<stdio.h> //stdio.h是C的标准I/O库 //#include<iostream> //iostream是C++的标准I/O库 //using namespace std; //命名空间 #define LIST_INIT_SIZE 5 //#define是宏定义 //1。定义结构体 //定义结构体类型,结构体名为StaticList typedef struct { int elem[LIST_INIT_SIZE]; //结构体成员变量 int length; //线性表长度变量 int listsize; //线性表最大长度变量 }StaticList; //2.初始化 void InitList_StaticList(StaticList &L){ L.length = 0; //表中实际元素的个数 L.listsize = LIST_INIT_SIZE; //这段连续空间可用的最大空间 } //3.插入表尾 int InsEnd_SList(StaticList &L, int x){ //执行插入操作 if(L.length == L.listsize){ //插入之前应先判断空间是否足够插入 printf("空间已满! "); return -1; //否就返回-1 } else{ L.elem[L.length] = x; //是就插入x的值 L.length++; //元素个数加+ return 1; //返回1 } } //4.插入表头 int InsHead_SList(StaticList &L, int x){ if(L.length == L.listsize){ printf("空间已满! "); return -1; } else{ for(int i = L.length-1;i >= 0;i--){ //循环从表尾开始i是表的长度减一 ,循环到0的话刚好是循环到表头。 L.elem[i+1] = L.elem[i]; //L.elem[i]刚好是表最后一位数,因为数组是从0开始的 } L.elem[0] = x; //表头的位置移出后把传进的数据加到表头上 L.length++; //长度加以一 return 1; } } //5.插入第i位置(包括表头、表尾) int InsI_SList(StaticList &L,int i,int x){ if(L.length == L.listsize){ printf("空间已满! "); return -1; }if(i < 1 || i > L.length +1 ){ printf("位置不合法! "); return -1; } else{ for(int j = L.length-1; j >= i-1;j--){ L.elem[j+1] = L.elem[j]; } L.elem[i-1] = x; L.length++; return 1; } } //6.删除表尾 int DelEnd_SList(StaticList &L){ if(L.length == 0){ //长度为0 printf("空表! "); return -1; } else{ L.length--; //删除表尾元素只需要把长度减一即可 return 1; } } //7.删除表头 int DelHead_SList(StaticList &L){ if(L.length ==0){ printf("空表! "); return -1; } else{ for(int j = 1; j < L.length;j++){ L.elem[j-1] = L.elem[j]; } L.length--; return 1; } } //8.删除第i位置的元素 int DelI_SList(StaticList &L,int i){ if(L.length == 0){ printf("空表!"); return -1; } if(i < 1 || i > L.length){ printf("位置不合法!"); return -1; } else{ for(int j = i; j < L.length; j++){ L.elem[j-1] = L.elem[j]; } L.length--; return 1; } } //.输出 void print(StaticList &L){ //一个函数,打印出线性表所有的元素 for(int i = 0; i <= L.length-1; i++){ //循环打印 ,(若只是i<L.length-1, L.length就不需要减一) printf("%d ", L.elem[i]); //打印出数组elem[i]的值 } printf(" "); //C++中使用cout<<endl作回车 } //主函数 int main(void){ StaticList SL; //定义结构体变量 C++语言语法 //struct StaticList SL; //定义结构体变量 C语言语法 int i,n; InitList_StaticList(SL); //创建SL表 printf("Enter Number: "); while(1){ //循环输入 int x; scanf("%d",&x); if(x == 9999) //如果输入的数为9999时,就停止输入 break; else InsEnd_SList(SL,x); //否则就插入输入的数 } printf("The Array Elem:"); print(SL); //调用打印线性表的函数 printf("(1).插入表尾:输入要插入的数据: "); scanf("%d",&i); InsEnd_SList(SL,i); //1.表尾插入操作 printf("The Array Elem:"); print(SL); printf("(2).插入表头:输入要插入的数据: "); scanf("%d",&i); InsHead_SList(SL,i); //2.表头插入操作 printf("The Array Elem:"); print(SL); printf("(3).插入第i位置:输入位置和数据: "); scanf("%d%d",&i,&n); InsI_SList(SL,i,n); //3.第i位置插入操作 printf("The Array Elem:"); print(SL); printf("(4).删除表尾元素: "); DelEnd_SList(SL); //4.删除表尾操作 printf("The Array Elem:"); print(SL); printf("(5).删除表头元素: "); DelHead_SList(SL); //5.删除表头操作 printf("The Array Elem:"); print(SL); printf("(6).删除第i位置元素:输入位置: "); scanf("%d",&i); DelI_SList(SL,i); //6.删除第i位置的元素 printf("The Array Elem:"); print(SL); return 0; }