順序表:採用順序存儲方式的線性表稱爲順序表數組
順序存儲結構:指的是用一段地址連續的存儲單元依次存儲線性表的數據元素,因爲是依次存放的,所以只要知道順序表的首地址及數據元素所佔的存儲長度,就容易計算出任何一個元素的位置code
(1)定義順序表的結構string
#include <stdio.h> #include <string.h> #define MAXSIZE 100 //定義順序表最大長度 typedef struct { //定義數據類型 char key[15]; char name[20]; int age; } DATA; typedef struct { DATA ListData[MAXSIZE+1]; //保存順序表數組 int ListLen; //順序表已存節點的數量 } SeqListType;
(2)定義順序表操做it
void SeqListInit(SeqListType *SL); //初始化順序表 int SeqListLength(SeqListType *SL); //返回順序表的元素數量 int SeqListAdd(SeqListType *SL, DATA data); //向順序表中添加元素 int SeqListInsert(SeqListType *SL, int n, DATA data); //向順序表中插入元素 int SeqListDelete(SeqListType *SL, int n); //刪除順序表中的數據元素 DATA *SeqListFindByNum(SeqListType *SL, int n); //根據序號返回元素 int SeqListFindByKey(SeqListType *SL, char *key); //按關鍵字查找 int SeqListAll(SeqListType *SL); //遍歷順序表的內容
(3)順序表操做io
/* *初始化順序表 * */ void SeqListInit(SeqListType *SL) { SL->ListLen = 0; //設置順序表長度爲0 } /* *返回順序表的元素數量 * */ int SeqListLength(SeqListType *SL) { return (SL->ListLen); } /* *向順序表中添加元素 * */ int SeqListAdd(SeqListType *SL, DATA data) { if (SL->ListLen >= MAXSIZE) { printf("順序表已滿,不能再添加節點!\n"); return 0; } SL->ListData[++SL->ListLen] = data; return 1; } /* *向順序表中插入元素 * */ int SeqListInsert(SeqListType *SL, int n, DATA data) { int i; if (SL->ListLen >= MAXSIZE) { printf("順序表已滿,不能再添加節點!\n"); return 0; } if (n<1 || n>SL->ListLen-1) { printf("插入節點序號錯誤,不能插入元素!\n"); return 0; } for (i=SL->ListLen; i>=n; i--) { SL->ListData[i+1] = SL->ListData[i]; } SL->ListData[n] = data; SL->ListLen++; return 1; } /* *刪除順序表中的數據元素 * */ int SeqListDelete(SeqListType *SL, int n) { int i; if (n<1 || n>SL->ListLen+1) { printf("刪除節點序號錯誤,不能刪除節點!\n"); return 0; } for (i=n; i<SL->ListLen; i++) { SL->ListData[i] = SL->ListData[i+1]; } SL->ListLen--; return 1; } /* *根據序號返回元素 * */ DATA *SeqListFindByNum(SeqListType *SL, int n) { if (n<1 || n>SL->ListLen+1) { printf("節點序號錯誤,不能返回節點!\n"); return NULL; } return &(SL->ListData[n]); } /* *按關鍵字查找 * */ int SeqListFindByKey(SeqListType *SL, char *key) { int i; for (i=1; i<=SL->ListLen; i++) { if (strcmp(SL->ListData[i].key, key) == 0) return i; } return 0; } /* *遍歷順序表的內容 * */ int SeqListAll(SeqListType *SL) { int i; for (i=1; i<=SL->ListLen; i++) { printf("(%s,%s,%d)\n", SL->ListData[i].key, SL->ListData[i].name, SL->ListData[i].age); } }