• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            天之道

            享受編程的樂趣。
            posts - 118, comments - 7, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            線性表基本操作

            Posted on 2012-08-21 16:25 hoshelly 閱讀(373) 評論(0)  編輯 收藏 引用 所屬分類: DS && Algorithm
            #include<stdio.h>
            #include<stdlib.h>
            #include<malloc.h>
            #define LIST_INIT_SIZE 100
            #define LISTINCREMENT 10
            #define OK 1
            #define ERROR 0
            #define OVERFLOW -1
            typedef int ElemType;
            typedef int Status;
            typedef struct {
                ElemType *elem; //存儲空間基址
                int length; //當前的線性表長度
                int listsize; //當前分配的存儲容量
            }SqList;

            //初始化線性表
            Status InitList_Sq(SqList *L) //用線性表的指針操作
            {
                (*L).elem = (ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
                if(!(*L).elem) exit(OVERFLOW);
                (*L).length=0;
                (*L).listsize=LIST_INIT_SIZE;
                return OK;
            }
            int ListLength(SqList L)
            {
                return L.length;
            }

            Status ListEmpty(SqList L)
            {
                if(L.length == 0)
                    return OK;
                else
                    return ERROR;
            }

            Status ClearList(SqList *L)
            {
                (*L).length=0;
                return OK;
            }

            Status DestroyList(SqList *L)
            {
                free((*L).elem);
                (*L).elem=NULL;
                (*L).length=0;
                (*L).listsize=0;
                return OK;
            }

            Status GetElem(SqList L,int i,ElemType *e)
            {
                if(i<1 || i>L.length)
                    exit(ERROR);
                *e=*(L.elem+i-1);
                return OK;
            }

            Status ListInsert(SqList *L,int i,ElemType e)
            {
                ElemType *newbase,*p,*q;
                if(i<1 || i>(*L).length+1)
                    return ERROR;
                if((*L).length >= (*L).listsize)
                {
                    newbase=(ElemType *)realloc((*L).elem,((*L).listsize+LISTINCREMENT)*sizeof(ElemType));
                    if(!newbase) exit(OVERFLOW);
                    (*L).elem=newbase;
                    (*L).listsize +=LISTINCREMENT;
                }
                q=(*L).elem+i-1; //插入位置
                for(p=(*L).elem+(*L).length-1;p>=q;--p)
                    *(p+1)=*p;
                *q=e;
                ++(*L).length;
                return OK;
            }

            Status Visit(ElemType *c)
            {
                printf("%d ",*c);
                return OK;
            }

            Status ListTraverse(SqList L)
            {
                int i;
                for(i=0;i<L.length;i++)
                    Visit(L.elem+i);
                printf("\n");
                return OK;
            }

            int LocateElem(SqList L,ElemType e)
            {
                int i;
                for(i=0;i<L.length;i++)
                {
                    if(*(L.elem+i) == e)
                        break;
                }
                if(i>=L.length)
                    return 0;
                return i+1;
            }

            Status ListDelete(SqList *L,int i,ElemType *e)
            {
                int k;
                if(L->length == 0)
                    return ERROR;
                if(i<1 || i>=L->length)
                    return ERROR;
                *e=*(L->elem+i-1);
                if(i<L->length)
                {
                    for(k=i;k<L->length;k++)
                        *(L->elem+k-1)=*(L->elem+k);
                }
                L->length--;
                return OK;
            }

            int main()
            {
                int i,e;
                SqList mylist;
                int m = InitList_Sq(&mylist);
                if(m)
                {
                    printf("線性表創建成功!\n");
                    printf("當前表長: %d \n",ListLength(mylist));
                }
                else
                    printf("線性表創建失敗.");
                for(i=1;i<=10;i++)
                    ListInsert(&mylist,i,i);
                ListTraverse(mylist);
                printf("當前表長:%d \n",ListLength(mylist));
                GetElem(mylist,5,&e);
                printf("第5個元素為:%d\n",e);
                ListDelete(&mylist,4,&e);
                printf("刪除第4個元素后:");
                ListTraverse(mylist);
                printf("當前表長:%d \n",ListLength(mylist));
                i=ClearList(&mylist);
                printf("清空線性表后:表長為 %d\n",mylist.length);
                i=ListEmpty(mylist);
                printf("表是否為空:%d (1:空 0:否)\n",i);


                return 0;
            }
            国产福利电影一区二区三区久久老子无码午夜伦不 | 伊人久久综合成人网| 欧美亚洲国产精品久久久久| 怡红院日本一道日本久久| 成人综合伊人五月婷久久| 91久久精品无码一区二区毛片| 久久se这里只有精品| 亚洲精品无码久久久影院相关影片| 精品人妻久久久久久888| 日韩欧美亚洲国产精品字幕久久久 | 色婷婷久久久SWAG精品| 久久久久亚洲AV成人片| 香蕉99久久国产综合精品宅男自| 久久精品aⅴ无码中文字字幕重口 久久精品a亚洲国产v高清不卡 | 91精品国产高清久久久久久91 | 国内精品伊人久久久久777| 国产精品一区二区久久精品| 久久影院亚洲一区| 蜜桃麻豆www久久| 亚洲国产精品无码久久久秋霞2 | 四虎国产精品免费久久久| 久久婷婷色综合一区二区| 国内精品久久久久久不卡影院| 久久久久久无码Av成人影院| 中文字幕精品久久| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | av国内精品久久久久影院| 中文字幕无码精品亚洲资源网久久 | 日韩精品久久久久久| 精品久久久久久久无码| 久久综合给久久狠狠97色| 久久久久国产精品人妻| 77777亚洲午夜久久多喷| 久久精品国产日本波多野结衣| 亚洲精品午夜国产va久久| 欧美成a人片免费看久久| 久久精品成人免费观看97| 久久天天躁狠狠躁夜夜av浪潮| 国内精品久久久久影院网站| 久久久久国产精品麻豆AR影院 | 伊人色综合久久天天|