#include <Windows.h> #define MAXSIZE 100/*定义表的长度,这是顺序表的缺点呀,不过有失必有得*/ #define OK 1 #define ERROR 0 typedef int Status;/*定义我们函数的返回状态*/ typedef int ElemType;/*数据类型*/ typedef struct { ElemType data[MAXSIZE];/*表在这里*/ int length;/*表的长度*/ }LinkList; /************************************************************************/ /* 获取第N个元素 */ /************************************************************************/ Status GetElem(int N,LinkList L,ElemType *e) { /*做一件事情前,总得界定范围,不要搞不符合中国国情的事情哦。。。*/ if (L.length<1) return ERROR; /*亲,不要跑偏了,只能在这里*/ if (N>L.length || N<1) return ERROR; *e=L.data[N-1]; return OK; } /************************************************************************/ /* 删除第N个元素 */ /************************************************************************/ Status DeleteElem(int N,LinkList *L,ElemType *e) { //同样的,要符合中国国情 if (L->length<1) return ERROR; /*亲,还是不要跑偏了,*/ if (N>L->length || N<1) return ERROR; /*删了一个元素,你后面的就要补上来,不然我们的表不就跟数组一样了。。。*/ *e=L->data[N-1];/*看看删的是哪位仁兄*/ /*没想到还是要搞特权,如果删除的是最后一位仁兄,他后面没兄弟了,不能补了,特批下吧*/ if (N<=L->length) { /*移动了一大篇呀,泪奔呀。。。时间复杂度O(n)*/ for (int i=N-1;i<L->length;i++) { L->data[i]=L->data[i+1];/*吼吼,前面买到火车票了,后面要票的的兄弟跟上*/ } } L->length--;/*把你队伍人数减掉一个,不能虚报哟,可是要吃枪子的*/ return OK; } /************************************************************************/ /* 插入第N个元素 */ /************************************************************************/ Status InsertElem(int N,LinkList *L,ElemType e) { /*老话了,符合国情,100年不动摇*/ if (L->length<1) return ERROR; if (N>L->length || N<1) return ERROR; /*移动元素,最好的办法就是从尾部往后面移动,注意不要越界了哟*/ if (N>=MAXSIZE) { return ERROR; } /*插队分为正常排队和非法排队。。。*/ if (N<=L->length) { /*缺陷呀,时间复杂度又是O(n)*/ for (int i=L->length;i>=N-1;i--) { L->data[i]=L->data[i-1]; } } L->data[N-1]=e;/*终于轮到男猪脚最后一插*/ L->length++; return OK; } int main() { /*好吧,初始化列表*/ LinkList L; L.length=1; L.data[L.length-1]=0; /*先说说顺序表的优势吧。。。*/ /*那就是读取元素,时间复杂度O(1). ps:不懂时间复杂度的编程同学,面壁去。。。*/ ElemType e; GetElem(1,L,&e); printf("length:%d,Elem:%d\n",L.length,e); /*插入吧*/ e=23; InsertElem(1,&L,e); printf("length:%d,Elem:%d\n",L.length,e); /*有得必有失,下面我们那删除一个元素看看。。*/ e=NULL; DeleteElem(1,&L,&e); printf("length:%d,Elem:%d\n",L.length,e); }