中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

web中如何實現實現順序表

發布時間:2021-10-21 11:10:56 來源:億速云 閱讀:139 作者:小新 欄目:編程語言

這篇文章主要為大家展示了“web中如何實現實現順序表”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“web中如何實現實現順序表”這篇文章吧。

seqlist.h

#ifndef __SEQLIST_H__ 
#define __SEQLIST_H__   
  
#include<stdio.h>  
#include<stdlib.h>  
#include<assert.h>  
  
#define INIT_SIZE  2  
#define ADD_SIZE 3  
typedef int DataType;  
  
typedef struct Seqlist  
{  
    DataType *data;  
    int size;                         //當前空間存儲的元素個數  
    int capacity;                     //當前空間所能存儲的最大容量  
}Seqlist,*pSeqlist;  
  
void InitSeqlist(pSeqlist pSeq);  
void DestorySeqlist(pSeqlist pSeq);  
void PushBack(pSeqlist pSeq,DataType x);  
void PopBack(pSeqlist pSeq);  
void PushFront(pSeqlist pSeq,DataType x);  
void PopFront(pSeqlist pSeq);  
void Remove(pSeqlist pSeq,DataType x);  
void RemoveAll(pSeqlist pSeq,DataType x);  
void BubbleSort(pSeqlist pSeq);  
void InsertSort(pSeqlist pSeq);  
void SelectSort(pSeqlist pSeq);  
int BinarySearch(pSeqlist pSeq,DataType x);  
void  Erase(pSeqlist pSeq,int pos);  
void PrintSeqlist(pSeqlist pSeq);  
  
#endif             //SEQLIST_D_H__

seqist.c

#include"seqlist.h"
void InitSeqlist(pSeqlist pSeq)                 
{  
    pSeq->data = (DataType *)malloc(INIT_SIZE*sizeof(DataType));  
    if (pSeq->data == NULL)  
    {  
        printf("out of memory\n");  
        exit(1);  
    }  
    pSeq->size = 0;  
    pSeq->capacity = INIT_SIZE;     //將容量置為當前空間所能存儲的最大值  
}  
  
void DestorySeqlist(pSeqlist pSeq)  
{  
    free(pSeq->data);  
    pSeq->data = NULL;  
    pSeq->size = 0;  
    pSeq->capacity = 0;  
}  
  
void CheckCapacity(pSeqlist pSeq)       //查看當前空間是否已滿  
{  
    assert(pSeq);  
    if (pSeq->size == pSeq->capacity)    //如果滿了則進行擴容  
    {  
        DataType *tmp = NULL;                           
        tmp = (DataType *)realloc(pSeq->data, (pSeq->capacity += ADD_SIZE)*sizeof(DataType));  
        if (NULL == tmp)  
        {  
            printf("out of memory\n");  
            exit(1);  
        }  
        pSeq->data = tmp;  
    }  
}  
  
void PushBack(pSeqlist pSeq, DataType x)  
{  
    assert(pSeq);  
    CheckCapacity(pSeq);                  //只要插入元素,首先就要檢查空間是否以滿  
    pSeq->data[pSeq->size++] = x;         //插入元素后size也要變化  
}  
  
void PopBack(pSeqlist pSeq)  
{  
    assert(pSeq);  
    if (pSeq->size == 0)                   //異常情況,表已空  
    {  
        printf("表已空\n");  
        return;  
    }  
    pSeq->size--;  
}  
  
void PushFront(pSeqlist pSeq, DataType x)  
{ 
int i = 0;
    assert(pSeq);  
    CheckCapacity(pSeq);            //只要插入元素,首先就要檢查空間是否以滿  
     
    for (i = pSeq->size; i > 0; i--)   //從后往前先將數據移動  
    {  
        pSeq->data[i] = pSeq->data[i-1];  
    }  
    pSeq->data[0] = x;  
    pSeq->size++;  
}  
  
void PopFront(pSeqlist pSeq)  
{  
int i = 0;
    assert(pSeq);
    if (pSeq->size == 0)                     //異常情況,表空  
    {  
        printf("表已空\n");  
        return;  
    }  
    for (i = 0; i < pSeq->size-1; i++)        //直接從第二個元素依次向前覆蓋  
    {  
        pSeq->data[i] = pSeq->data[i + 1];  
    }  
    pSeq->size--;  
}  
  
void Remove(pSeqlist pSeq, DataType x)       //刪除第一個出現的x  
{  
int i = 0;  
    int j = 0;
    assert(pSeq);   
    for (i = 0; i < pSeq->size; i++)  
    {  
        if (pSeq->data[i] == x)  
        {  
            for (j = i; j < pSeq->size-1; j++)      //刪除的時候從這個元素的后面向前覆蓋  
            {  
                pSeq->data[j] = pSeq->data[j + 1];  
            }  
            pSeq->size--;  
            return;  
        }  
    }  
}  
  
void RemoveAll(pSeqlist pSeq, DataType x)  
{  
int i = 0;  
    int j = 0;
    assert(pSeq);    
    for (i = 0; i < pSeq->size; i++)  
    {  
        if (pSeq->data[i] == x)  
        {  
            for (j = i; j < pSeq->size - 1; j++)      //刪除的時候從這個元素的后面向前覆蓋  
            {  
                pSeq->data[j] = pSeq->data[j + 1];  
            }  
            pSeq->size--;  
        }  
    }  
}  
  
void BubbleSort(pSeqlist pSeq)  
{  
int flag = 0;  
    int i = 0;  
    int j = 0;  
    int k = pSeq->size-1;
    assert(pSeq);
    for (i = 0; i < pSeq->size - 1; i--)  
    {  
        int m = 0;  
        flag = 1;                               //將標記置1  
        for (j = 0; j < k; j++)  
        {  
            if (pSeq->data[j]>pSeq->data[j + 1])  
            {  
                DataType tmp = pSeq->data[j];  
                pSeq->data[j] = pSeq->data[j + 1];  
                pSeq->data[j + 1] = tmp;  
                flag = 0;  
                m = j;                           //記錄最后一次交換的位置  
            }  
        }  
        if (flag)               //標記位1表示已經有序  
        {  
            return;  
        }  
        m = k;                  //將k設置成最后一次交換的位置  
    }  
}  
  
void InsertSort(pSeqlist pSeq)                //插入排序  
{  
int i = 0;  
    int j = 0; 
    assert(pSeq);  
    for (i = 1; i < pSeq->size; i++)  
    {  
        DataType tmp = pSeq->data[i];  
        for (j = i-1; j >=0; j--)  
        {  
            if (pSeq->data[j]>tmp)
            {  
                pSeq->data[j+1] = pSeq->data[j];  
            }  
            else  
            {  
                break;  
            }  
        }  
        pSeq->data[j+1] = tmp;
    }  
}  
  
void SelectSort(pSeqlist pSeq)  
{  
int i = 0;  
    int j = 0;  
    int k = 0;  
    assert(pSeq);  
    for (i = 0; i < pSeq->size; i++)  
    {  
        k = i;  
        for (j = i + 1; j < pSeq->size; j++)  
        {  
            if (pSeq->data[k]>pSeq->data[j])  
            {  
                k = j;
            }  
        }  
        if (k != i)  
        {  
            DataType tmp = pSeq->data[k];  
            pSeq->data[k] = pSeq->data[i];  
            pSeq->data[i] = tmp;  
        }  
    }  
}  
  
int BinarySearch(pSeqlist pSeq, DataType x)  
{  
int left = 0;  
    int right = pSeq->size - 1;
int mid=0;
    assert(pSeq);  
    mid = (left&right) + ((left^right) >> 1);  //求平均值  
    while (left <= right)  
    {  
        if (pSeq->data[mid]>x)  
        {  
            right = mid - 1;  
        }  
        else if (pSeq->data[mid] < x)  
        {  
            left = mid + 1;  
        }  
        else  
        {  
            return mid;  
        }  
    }  
    return -1;  
}  
  
void  Erase(pSeqlist pSeq, int pos)  
{  
int i = 0;
    assert(pSeq);   
    if (pos>= pSeq->size&&pos < 0) 
    {  
        printf("刪除位置不合法\n");  
        return;  
    }  
    for (i = pos; i < pSeq->size - 1; i++)      //從pos之后依次向前覆蓋  
    {  
        pSeq->data[i] = pSeq->data[i + 1];  
    }  
    pSeq->size--;  
}  
  
void PrintSeqlist(pSeqlist pSeq)  
{   
    int i = 0;
assert(pSeq);  
    if (pSeq->size == 0)  
    {  
        printf("表為空\n");  
        return;  
    }  
    for (i = 0; i < pSeq->size; i++)  
    {  
        printf("%d ", pSeq->data[i]);  
    }  
    printf("\n");  
}

test.c

#include"seqlist.h"  
  
void menu()  
{  
    printf("0.exit            1.PrintSeqlist \n");  
    printf("2.InitSeqlist     3.PushBack     \n");  
    printf("4.Popback         5.PushFornt    \n");  
    printf("6.PopFornt        7.Erase        \n");  
    printf("8.Remove          9.RemoveAll    \n");  
    printf("10.BubbleSort     11.BinarySearch\n");  
    printf("12.DestorySeqlist 13.InsertSort  \n");  
    printf("14.SelectSort           \n");  
    printf("請輸入:>");  
}  
  
  
void test(pSeqlist pSeq)  
{  
    DataType x = 0;  
    int n = 0;  
    int pos = 0;
int ret=0;
    while (1)  
    {  
        menu();  
        scanf("%d", &n);  
        switch (n)  
        {  
        case 0:  
            exit(1);  
            break;  
        case 1:  
            PrintSeqlist(pSeq);  
            break;  
        case 2:  
            InitSeqlist(pSeq);  
            break;  
        case 3:  
            printf("請輸入元素\n");  
            scanf("%d", &x);  
            PushBack(pSeq, x);  
            break;  
        case 4:  
            PopBack(pSeq);  
            break;  
        case 5:  
            printf("請輸入元素\n");  
            scanf("%d", &x);  
            PushFront(pSeq, x);  
            break;  
        case 6:  
            PopFront(pSeq);  
            break;  
        case 7:  
            printf("請輸入刪除位置\n");  
            scanf("%d", &pos);  
            Erase(pSeq, pos);  
            break;  
        case 8:  
            printf("請輸入元素\n");  
            scanf("%d", &x);  
            Remove(pSeq, x);  
            break;  
        case 9:  
            printf("請輸入元素\n");  
            scanf("%d", &x);  
            RemoveAll(pSeq, x);  
            break;  
        case 10:  
            BubbleSort(pSeq);  
            break;  
        case 11:
            printf("請輸入元素\n");  
            scanf("%d", &x);  
            ret=BinarySearch(pSeq, x);  
            if (ret == -1)  
                printf("沒有這個元素\n");  
            printf("下標為:%d\n", ret);  
            break;  
        case 12:  
            DestorySeqlist(pSeq);  
            break;  
        case 13:  
            InsertSort(pSeq);  
            break;  
        case 14:  
            SelectSort(pSeq);  
            break;  
        default:  
            printf("輸入無效\n");  
            break;  
        }  
    }  
}  
  
  
  
int main()  
{  
    Seqlist pSeq;  
    test(&pSeq);  
    system("pause");  
    return 0;  
}

以上是“web中如何實現實現順序表”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

web
AI

洛南县| 永城市| 交城县| 夹江县| 偏关县| 依安县| 东丽区| 青川县| 金湖县| 且末县| 三原县| 永新县| 岗巴县| 五河县| 宕昌县| 长泰县| 县级市| 桑植县| 天全县| 忻州市| 沭阳县| 鄄城县| 阳信县| 苍梧县| 隆昌县| 贵州省| 古丈县| 潮安县| 尤溪县| 友谊县| 通海县| 炉霍县| 汉寿县| 惠安县| 芒康县| 潼南县| 桦甸市| 洛扎县| 徐汇区| 都兰县| 南通市|