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,如需轉載請自行聯系原作者