数据结构考研复习(顺序表)
为了方便自己理解,将C和C++的实现进行了混合,主体内容基本上按照王道考研复习指导书的内容进行实现。
所使用的编译器为Code::Blocks 13.12
#include<stdio.h> #define InitSize 100 typedef struct{ int *data; int length; }Sqlist; /* -1- 初始化顺序表*/ bool init_list(Sqlist &L){ L.data = new int[InitSize]; L.length = 0; return true; } /* -2- 插入元素*/ bool insert_list(Sqlist &L, int i, int e){ if(i < 1 || i > L.length + 1){ printf("插入位置不合法!\n"); return false; } if(L.length >= InitSize){ printf("顺序表空间已满!\n"); return false; } for(int j = L.length;j >= i;j--){ L.data[j] = L.data[j-1]; } L.data[i-1] = e; L.length++; return true; } /* -3- 获取元素*/ bool get_element(Sqlist L,int i,int &e){ if(i < 1 || i > L.length) { printf("访问位置不合法!"); return false; } e = L.data[i-1]; return true; } /* -4- 删除元素*/ bool delete_element(Sqlist L,int i,int &e){ if(i < 1 || i > L.length) { printf("访问位置不合法!"); return false; } e = L.data[i-1]; for(int j = i;j <L.length;j++) { L.data[j-1] = L.data[j]; } L.length--; printf("删除成功!"); return true; } /* -5- 查找元素*/ int locate_element(Sqlist L,int e){ for (int i = 1;i < L.length;i++) { if(L.data[i] == e) { return i+1; } } return 0;//这里不能和前面一样返回true } int main(){ /*初始化*/ Sqlist L; if(!init_list(L)) { printf("创建失败!\n"); } else { printf("创建成功!\n"); printf("==========\n"); } int i, e_1, l; printf("请输入顺序表长度:\n"); scanf("%d",&l); printf("依次输入%d个值\n",l); for(int i = 1;i <= l;i++){ scanf("%d",&e_1); insert_list(L,i,e_1); } /*输出顺序表*/ for(int i=1;i <= L.length;i++){ int e_2; get_element(L,i,e_2); printf("%d ",e_2); } printf("\n"); /*查找元素*/ printf("请输入要查找的元素:\n"); int e_3; scanf("%d",&e_3); int temp = locate_element(L,e_3); if(!temp) { printf("顺序表中没有此值!\n"); } else { printf("%d所处的位置是顺序表的第%d位\n",e_3,temp); printf("===============================\n"); } /*删除元素*/ printf("请输入要删除元素的位置:\n"); int e_4,k; scanf("%d",&k); delete_element(L,k,e_4); /*再次输出顺序表*/ printf("当前顺序表为:\n"); for(int j = 1;j < L.length;j++){ int e_5; get_element(L,j,e_5); printf("%d ",e_5); } return 0; }