這個實驗應該怎樣做?先寫什么后寫什么呀?
uj5u.com熱心網友回復:
簡單的寫了一下, 自己測驗吧#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 線性表定義,用int陣列來實作
typedef struct LineListType { int nMaxSize; int nSize; int *pData; } LineList;
// 創建一個空的線性表
LineList * CreateLineList(void ) {
LineList * pList = (LineList*) malloc( sizeof(LineList));
pList->nMaxSize = 8;
pList->nSize = 0;
pList->pData = (int *) malloc(pList->nMaxSize*sizeof(int));
return pList;
};
// 在線性表后面,一次插入一個陣列
void AppendList(LineList* pList, int n, int *v) {
if ( pList==NULL ) return;
if ( pList->nMaxSize - pList->nSize <n ) {
pList->nMaxSize += (n+7)>>3 << 3;
pList->pData = (int*) realloc(pList->pData, pList->nMaxSize*sizeof(int));
}
memcpy(pList->pData+pList->nSize, v, n*sizeof(int));
pList->nSize += n;
};
// 列印輸出線性表
void PrintList(LineList * pList) {
for (int i=0; i<pList->nSize; i++)
printf("%d ", pList->pData[i]);
printf("\n");
};
// 在指定的位置插入,有效范圍0~nSize, 尾巴上是可以插入的
int InsertList(LineList *pList, int nPos, int v)
{
if (NULL == pList) return 0;
if ( nPos <0 || nPos > pList->nSize ) {
printf("InsertList:Wrong postion\n\007");
return 0;
}
if (pList->nMaxSize < pList->nSize +1 ) {
pList->nMaxSize += 8;
pList->pData = (int*) realloc(pList->pData, pList->nMaxSize*sizeof(int));
};
int t = pList->nSize++;
while ( t>nPos) {
pList->pData[t] = pList->pData[t-1];
--t;
}
pList->pData[t] = v;
return 1;
}
// 洗掉指定位置為的
// return 0 means falure, return 1 means success
int DeleteAtList(LineList*pList, int nPos) {
if ( NULL == pList )return 0;
if (nPos <0 || nPos >= pList->nSize ) {
printf("DeleteAtList: Wrong Position\n");
return 0;
};
while(nPos<pList->nSize) {
pList->pData[nPos] = pList->pData[nPos+1];
nPos++;
};
--pList->nSize;
return 1;
};
// 排序用的比較函式,給qsort使用
int comp(const void *a, const void *b ) {
return *((int*)a) > *((int*)b);
};
// 線性表排序。 如果愿意,擴展線性表的結構
void SortList(LineList* pList) {
qsort (pList->pData, pList->nSize, sizeof(int), comp);
};
// 對已經排序的線性表做插入
int InsertSortedList(LineList* pList, int v ) {
// 自己寫吧
}
int main() {
LineList *pList = CreateLineList();
int init[] = {12, 25,7, 42,19,38};
AppendList(pList, 6, init);
PrintList(pList);
InsertList(pList, 3, 2);
PrintList(pList);
InsertList(pList, 12,4);
DeleteAtList(pList,2);
PrintList(pList);
SortList(pList);
PrintList(pList);
return 0;
}
uj5u.com熱心網友回復:
我學的資料結構,大一,應該是用c和c++都可以轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/134410.html
標籤:模式及實現
上一篇:關于取余運算的問題
下一篇:哪位高手能給出個模板
