天天看點

動态順序表

c語言實作動态順序表:

#define _CRT_SECURE_NO_WARNIN

#include<stdio.h>

#include<assert.h>

#include<malloc.h>

typedef int Datetype;

typedef struct Seqlist

{

Datetype* _pdate;

size_t _size;

size_t _capacity;

}Seq,*pSeq;

void InitSeqlist(pSeq pseq)

assert(pseq);

pseq->_capacity = 10;

pseq->_pdate = (Datetype*)malloc(sizeof(Datetype)*(pseq->_capacity));

    pseq->_size = 0;

size_t i = 0;

Datetype* p = pseq->_pdate;

for (i = 0; i < pseq->_capacity; i++)

*p = 0;

p++;

}

void PrintSeqlist(pSeq pseq)

int i = (int)pseq->_capacity;//>>>>>>>>>>>注意無符号的   ——   運算

while (i--)

printf("%d ",*p);//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>%d?%c?

printf("\n");

int find(pSeq pseq, Datetype x)

for (i = 0; i < pseq->_size; i++)

if (*p == x)

return i;

return -1;

void AddCapacity(pSeq pseq)

Datetype* padd;

    padd = (Datetype*)malloc(sizeof(Datetype)*(2 * pseq->_capacity));

free(pseq->_pdate);

pseq->_pdate = padd;

void PushBack(pSeq pseq, Datetype x)

if (pseq->_size == pseq->_capacity)

AddCapacity(pseq);

for (i = 0; i < pseq->_size; i++)//size_t   注意    -1 之後的值!!!

*p = x;

pseq->_size++;

void PopBack(pSeq pseq)

if (pseq->_size == 0)

printf("此表暫無資料!\n");

return 0;

}//指向最後一個資料的   後面  一個

*(--p) = 0;

pseq->_size--;

void PushFront(pSeq pseq, Datetype x)

i = pseq->_size;

*p = *(p - 1);

p--;

void PopFront(pSeq pseq)

int i = 0;

i = (int)pseq->_size - 1;

*p = *(p + 1);

void Erase(pSeq pseq, size_t pos)

for (i = 0; i < pos-1; i++)

p++;//.........相當于    p[循環次數]     ..........

i = pseq->_size - pos;

void Remove(pSeq pseq, Datetype x)

size_t i = 0,j = 0;

j = i;

for (; j < pseq->_size; j++)

void RemoveAll(pSeq pseq, Datetype x)

size_t i = 0, j = 0;

Datetype* pos = pseq->_pdate;

if (*pos == x)

Datetype* p = pos;

pos--;//*****這是保證停留在原來的地方

pos++;

void Modify(pSeq pseq, size_t pos, Datetype x)

assert(pos <= pseq->_capacity);

for (i = 0; i < pos - 1; i++)

int main()

Seq seq;

InitSeqlist(&seq);

PrintSeqlist(&seq);

PushBack(&seq, 1);

PushBack(&seq, 2);

PushBack(&seq, 3);

PushBack(&seq, 4);

PushBack(&seq, 5);

Modify(&seq, 2, 3);

//RemoveAll(&seq, 2);

//Erase(&seq, 4);

//Remove(&seq, 2);

//PopBack(&seq);

//PushFront(&seq, 6);

//PopFront(&seq);

//printf("%d\n", find(&seq, 5));

system("pause");

本文轉自 ye小灰灰  51CTO部落格,原文連結:http://blog.51cto.com/10704527/1719273,如需轉載請自行聯系原作者

繼續閱讀