- /*
- 線性表的順序存儲實現 C語言版本
- 作者:Shmily
- 日期:2011年8月30日
- 編譯環境 VC++6.0
- */
- /**************************************************/
- #include <stdio.h>
- /**************************************************/
- #define MaxSize 20 //線性表最大長度
- #define OK 1
- #define ERROR 0
- #define TRUE 1
- #define FALSE 0
- typedef int Status;
- typedef int ElemType;
- /**************************************************/
- typedef struct {
- ElemType data[MaxSize+1]; //爲了操作方便,規定下標從1開始
- int length; //順序表當前長度
- }SqList;
- /**************************************************/
- //置空表
- Status SetNull(SqList *L)
- {
- L->length = 0;
- return OK;
- }
- /**************************************************/
- //在末尾追加
- Status append_arr(SqList *L, ElemType val)
- {
- if (L->length > MaxSize)
- return FALSE;
- L->data[++L->length] = val;
- return TRUE;
- }
- /**************************************************/
- //求順序表的長度
- int GetLength(SqList *L)
- {
- return L->length;
- }
- /**************************************************/
- //輸出順序表
- void DisLisy(SqList *L)
- {
- int i;
- for (i=1; i<=L->length; ++i)
- printf("%d ", L->data[i]);
- }
- /**************************************************/
- //順序表判空
- Status ListEmpty(SqList *L)
- {
- if (0 == L->length)
- return TRUE;
- else
- return FALSE;
- }
- /**************************************************/
- //取得順序表中第i個元素的值,放入e中
- Status GetElem(SqList *L, int i, ElemType *e)
- {
- if (i<=0 || i>L->length)
- return ERROR;
- *e = L->data[i];
- return OK;
- }
- /**************************************************/
- //查找順序表中是否有與e相同的元素
- //若有則返回該元素的下標
- //否則返回0
- Status LocateElem(SqList *L, ElemType e)
- {
- int i;
- for (i=1; i<=L->length; ++i)
- {
- if (e == L->data[i])
- return i;
- }
- return FALSE;
- }
- /**************************************************/
- //在順序表中的第i個位置插入元素e
- //若插入成功返回TRUE
- //否則返回FALSE
- Status ListInset(SqList *L, int i, ElemType e)
- {
- int k;
- if ( (i<1 || i>L->length+1)
- && (L->length < MaxSize) )
- return FALSE;
- if (i<=L->length)
- {
- for (k=L->length; k>=i; --k)
- L->data[k+1] = L->data[k];
- }
- L->data[i] = e;
- ++L->length;
- return TRUE;
- }
- /**************************************************/
- //刪除順序表中第i個元素的值
- //刪除成功返回被刪除的元素的值
- //刪除失敗返回FALSE
- Status ListDelete(SqList *L, int i, ElemType *e)
- {
- int k;
- if (ListEmpty(L))
- return FALSE;
- if (i<1 || i>L->length)
- return FALSE;
- *e = L->data[i];
- if (i<L->length)
- {
- for (k=i; k<L->length; ++k)
- L->data[k] = L->data[k+1];
- }
- --L->length;
- return TRUE;
- }
- /**************************************************/
- int main(void)
- {
- SqList L;
- ElemType e;
- SetNull(&L);
- append_arr(&L, 3);
- append_arr(&L, 2);
- append_arr(&L, 6);
- append_arr(&L, 2);
- ListDelete(&L, 2, &e);
- DisLisy(&L);
- printf("\n\n%d", e);
- return 0;
- }
線性表的順序存儲實現及相關操作 C語言版
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.