国产丝袜美女一区二区,精品久久免费影院,久久91精品久久久水蜜桃,亚洲人成网站999久久久综合,天天2023亚洲欧美,久久久久日韩精品,久久这里只是精品最新,999精品欧美一区二区三区

考研論壇

 
查看: 16556|回復(fù): 0
打印 上一主題 下一主題

[其它] 數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言)教材的偽代碼(一)

[復(fù)制鏈接]

2

主題

104

帖子

270

積分

一般戰(zhàn)友

Rank: 2

精華
0
威望
2
K幣
268 元
注冊(cè)時(shí)間
2016-11-14
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2017-1-4 21:10 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
本帖最后由 失速的磚頭 于 2017-1-4 21:17 編輯

#include <stdio.h>
#include <stdlib.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;
typedef struct _SqList{

ElemType* elem;//elem指向數(shù)組的首地址
        int length;//當(dāng)前長(zhǎng)度
        int listsize;//數(shù)組的大小
}SqList;

Status InitList_Sq(SqList& L){
        L.elem = (ElemType*)malloc(LIST_INIT_SIZE * sizeof(ElemType));
        if (!L.elem){
                printf("初始化失敗.\n");
                return FALSE;
        }
        L.length = 0;

        L.listsize = LIST_INIT_SIZE;
        printf("初始化成功.\n");
        return OK;
}

Status DestroyList_Sq(SqList& L){
        //初始條件:線(xiàn)性表L存在
        //操作結(jié)果:銷(xiāo)毀線(xiàn)性表L.
        if (!L.elem){
                printf("線(xiàn)性表不存在.\n");
                return FALSE;
        }
        free(L.elem);

        printf("線(xiàn)性表銷(xiāo)毀成功.\n");
        return OK;
}

Status ClearList_Sq(SqList& L){
        //初始條件:線(xiàn)性表L存在
        //操作結(jié)果:將L重置為空表
        if (!L.elem){
                printf("線(xiàn)性表不存在.\n");
                return FALSE;
        }
        InitList_Sq(L);

        return OK;
}

Status ListEmpty_Sq(SqList L){
//初始條件:線(xiàn)性表L存在.
//操作結(jié)果:如果L是空表,返回TRUE,否則返回FALSE
        if (L.length == 0){
                printf("L是空表.\n");
                return TRUE;
        }
        else{
                printf("L不是空表.\n");
                return FALSE;
        }
}

Status ListLength_Sq(SqList L){
//初始條件:線(xiàn)性表L存在.
//操作結(jié)果:返回L中數(shù)據(jù)元素個(gè)數(shù)
        return L.length;
}

Status GetElem_Sq(SqList L, int i, ElemType& e){
        //初始條件:線(xiàn)性表已存在1 ≤ i ≤ ListLength(L).
        //操作結(jié)果:用e返回L中第i個(gè)數(shù)據(jù)元素的值
        e = L.elem[i-1];
        return OK;
}

Status compare (ElemType x, ElemType y){
        if (x == y){
                return TRUE;
        }
        else{
                return FALSE;
        }
}

Status LocateElem_Sq(SqList L, ElemType e, Status(*compare) (ElemType, ElemType)){
//線(xiàn)性表L存在,compare()是數(shù)據(jù)元素判定函數(shù).返回L中第1個(gè)與e滿(mǎn)足關(guān)系compare()的數(shù)據(jù)元素的位序.
//若這樣的元素不存在,則返回0;
        int i = 1;//i的初值為第一個(gè)元素的位序
        ElemType* p = L.elem;//p的初值為第一個(gè)元素的存儲(chǔ)位置(地址)
        while (i <= L.length && !(*compare)(*p++, e))
                ++i;
        if (i <= L.length)
                return i;
        else return FALSE;
}

int PriorElem_Sq(SqList L, ElemType cur_e, ElemType& pre_e){
//初始條件: 線(xiàn)性表L存在.
//操作結(jié)果: 若cur_e是L的數(shù)據(jù)元素,且不是第一個(gè),則用pre_e返回他的前驅(qū),否則操作失敗,pre_e無(wú)定義NULL.
        int i = 1;
        i = LocateElem_Sq(L, cur_e, compare);
        if (i >1 && i <= L.length){ //符合條件
        pre_e = L.elem[i-2];//減1是當(dāng)前值,再減1是前驅(qū)值
        }
        else{
                pre_e = 0;
                return FALSE;
        }
        return OK;
}


Status NextElem_Sq(SqList L, ElemType cur_e, ElemType& next_e){
//初始條件: 線(xiàn)性表L存在.
//操作結(jié)果: 若cur_e是L的數(shù)據(jù)元素,且不是最后一個(gè),則用next_e返回他的后繼,否則操作失敗,next_e無(wú)定義NULL.
        int i = 1;
        i = LocateElem_Sq(L, cur_e, compare);
        if (i >=1 && i < L.length){ //符合條件
        next_e = L.elem;//i在數(shù)組中就是他的后繼.
        }
        else{
                next_e = 0;
                return FALSE;
        }
        return OK;
}

Status ListInsert_Sq(SqList& L, int i, ElemType e){
//初始條件:線(xiàn)性表L存在,1 ≤ i ≤ ListLength(L)+1
//操作結(jié)果:在L中第i個(gè)位置之前插入新的數(shù)據(jù)元素e,L的長(zhǎng)度加1
        if (i<1 || i>L.length + 1)
                return ERROR;
        if (L.length >= L.listsize){
                ElemType* newbase = (ElemType*)realloc(L.elem, (L.listsize + LISTINCREMENT)*sizeof(ElemType));

                if (!newbase)
                        exit(OVERFLOW);
                L.elem = newbase;
                L.listsize += LISTINCREMENT;
        }
        ElemType* q = &(L.elem[i - 1]);
        ElemType*p = NULL;
        for (p = &(L.elem[L.length - 1]); p >= q; --p)
                *(p + 1) = *p;

        *q = e;
        ++L.length;
        return OK;

}


Status ListDelete_Sq(SqList& L, int i, ElemType& e){
//初始條件:線(xiàn)性表L存在且非空,1 ≤ i ≤ ListLength(L)
//操作結(jié)果:刪除L的第i個(gè)數(shù)據(jù)元素,并用e返回其值,L的長(zhǎng)度減1
        if ((i<1) || (i > L.length))
                return ERROR;
        
        ElemType* p = NULL;
        p = &(L.elem[i - 1]);
        e = *p;
        ElemType* q = NULL;
        q = L.elem + L.length - 1;
        
        for (++p; p <= q; ++p)
                *(p - 1) = *p;
        --L.length;
        return OK;
}

ElemType& visit(ElemType& e){
//輸出線(xiàn)性表L一個(gè)數(shù)據(jù)元素.
        return e;
}

Status ListTraverse_Sq(SqList L, ElemType& (*visit)(ElemType& e)){
//初始條件:線(xiàn)性表L存在
//操作結(jié)果:依次對(duì)L的每個(gè)數(shù)據(jù)元素調(diào)用函數(shù)visit().一旦visit()失敗,則操作失敗.
//就是遍歷函數(shù)
        int i = 1;
        ElemType p;
        while (i<=L.length){
                p = visit(*(L.elem++));
                printf("%d ", p);
                i++;
        }
        printf("\n");
        return OK;
}

int main(void)
{
        SqList p;
        p.elem = NULL;
        p.length = -1;
        p.listsize = -1;
        
        InitList_Sq(p);
        DestroyList_Sq(p);
        ClearList_Sq(p);
        ListEmpty_Sq(p);
        ListLength_Sq(p);
        //插入線(xiàn)性表,
        int e;
        printf("在\"=\"后鍵入Ctrl+z表示輸入結(jié)束.\n");
        while (1){
                printf("請(qǐng)輸入第%d個(gè)元素的值=", ListLength_Sq(p)+1);
                if (scanf("%d", &e) == EOF)
                        break;
                ListInsert_Sq(p, ListLength_Sq(p) + 1, e);

        }
        ListTraverse_Sq(p, (*visit));
        printf("--------------\n");
        // 顯示長(zhǎng)度
        ListLength_Sq(p);
        printf("數(shù)據(jù)元素的個(gè)數(shù)=%d\n",ListLength_Sq(p));
        // 返回元素      
        int i = 1;//初始化i=1
        printf("要返回第幾個(gè)元素的值(1 ≤ i ≤ %d) ", ListLength_Sq(p));
        scanf("%d",&i);
        GetElem_Sq(p, i, e);
        printf("e=%d\n", e);
        printf("--------------\n");
        //判定函數(shù)
        printf("請(qǐng)輸入要查找的數(shù)=", e);
        scanf("%d", &e);
        printf("在線(xiàn)性表(順序表)的第%d位\n", LocateElem_Sq(p, e, (*compare)));
        printf("--------------\n");
        //返回前驅(qū)的值
        printf("請(qǐng)輸入要查找的數(shù)=", e);
        int pre_e1 = 0;
        scanf("%d", &e);
        PriorElem_Sq(p, e, pre_e1);
        printf("%d的前驅(qū)是=%d\n",e,pre_e1);
        printf("--------------\n");
        //返回后繼的值
        printf("請(qǐng)輸入要查找的數(shù)=", e);
        int next_e1 = 0;
        scanf("%d", &e);
        NextElem_Sq(p, e, next_e1);
        printf("%d的后繼是=%d\n",e,next_e1);
        printf("--------------\n");
        // 插入函數(shù)
        printf("請(qǐng)輸入要插入的位置(1≤i≤%d)=",ListLength_Sq(p)+1);
        scanf("%d",&i);
        printf("請(qǐng)輸入要插入的值=");
        scanf("%d",&e);  
        ListInsert_Sq(p, i, e);
        ListTraverse_Sq(p, (*visit));
        printf("--------------\n");
        //刪除函數(shù)
        printf("請(qǐng)輸入要?jiǎng)h除的位置(1≤i≤%d)=",ListLength_Sq(p));
        scanf("%d",&i);
        ElemType del_e;  
        ListDelete_Sq(p, i, del_e);
        ListTraverse_Sq(p, (*visit));
        printf("--------------\n");
        //再掉一次遍歷函數(shù).
        ListTraverse_Sq(p, (*visit));
        return OK;
}
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 注冊(cè) 人人連接登陸

本版積分規(guī)則   

關(guān)閉

您還剩5次免費(fèi)下載資料的機(jī)會(huì)哦~

掃描二維碼下載資料

使用手機(jī)端考研幫,進(jìn)入掃一掃
在“我”中打開(kāi)掃一掃,
掃描二維碼下載資料

關(guān)于我們|商務(wù)合作|小黑屋|手機(jī)版|聯(lián)系我們|服務(wù)條款|隱私保護(hù)|幫學(xué)堂| 網(wǎng)站地圖|院校地圖|漏洞提交|考研幫

GMT+8, 2025-9-16 04:00 , Processed in 0.056806 second(s), Total 9, Slave 8(Usage:6.5M, Links:[2]1,1_1) queries , Redis On.

Powered by Discuz!

© 2001-2017 考研 Inc.

快速回復(fù) 返回頂部 返回列表
× 關(guān)閉