顺序表的逆置

来源:互联网 发布:腾鹰软件 编辑:程序博客网 时间:2024/06/06 05:08

例题:试写一算法,实现顺序表的就地逆置,即利用原表的存储空间将线性表(a1,……an)逆置为(an,……a1)。

#include <stdio.h>#include<stdlib.h>#include<assert.h>#define INITSIZE 10typedef struct DSeqList{int *elem;//指向存放数据的动态数组int length;//有效数据个数int listsize;//总容量}DSeqList,*PDSeqList;//初始化void InitSeqList(PDSeqList ps){assert(ps != NULL);if(ps == NULL){return ;}ps->elem = (int *)malloc(sizeof(int)*INITSIZE);ps->length = 0;ps->listsize = INITSIZE;}//判满static bool IsFull(PDSeqList ps){return ps->length == ps->listsize;}//扩容static void Inc(PDSeqList ps){ps->elem = (int *)realloc(ps->elem,sizeof(int)*2*ps->listsize);ps->listsize *= 2;}//插入数据bool Insert(PDSeqList ps,int pos,int val){if(pos < 0 || pos > ps->listsize){return false;}if(IsFull(ps)){Inc(ps);//如果满了就扩容}for(int i = ps->length-1;i >= pos;i--){ps->elem[i+1] = ps->elem[i];}ps->elem[pos] = val;ps->length++;return true;}//逆置void Reverse(PDSeqList ps){assert(ps != NULL);if(ps == NULL){return ;}int tmp;for(int i = 0;i < ps->length/2;i++){tmp = ps->elem[i];ps->elem[i] = ps->elem[ps->length-1-i];ps->elem[ps->length-1-i] = tmp;}}//打印void Show(PDSeqList ps){for(int i = 0;i < ps->length;i++){printf("%d ",ps->elem[i]);}printf("\n");}int main(){DSeqList ds;InitSeqList(&ds);for(int i=0;i<15;i++){Insert(&ds,i,i);}Show(&ds);Reverse(&ds);Show(&ds);return 0;}

原创粉丝点击