這個實驗應該怎樣做?先寫什么后寫什么呀?
uj5u.com熱心網友回復:
感覺題目不太對一樣uj5u.com熱心網友回復:
你到底是c還是c++的給你寫了一個C的,然后你又跑c++這里提問
要是用c++,直接封裝一個類出來了
你自己折騰吧





#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熱心網友回復:
#include <stdio.h>#define maxsize 100
typedef struct
{
int elem[maxsize];
int length;
}Sqlist ;
Sqlist L;
Initlist(Sqlist *L,int n)//初始化1
{
// L->length=0;
int i;
// printf("請輸入%d個元素:",n);
L->length=n;
for (i=0;i<n;i++){L->elem[i]=i+2;
// scanf("%d",&(L->elem[i]));
}
if ( (i)==n ){ printf("******************初始化成功!!!******************\n");Listtlength(L);}
}
Listtlength(Sqlist *L)//求長度2
{
printf("該線性表的長度為:%d\n",L->length);
}
TraverseList( Sqlist *L,int n)//遍歷該順序表3
{
int i;
printf("遍歷結果:");
for (i=0;i<n;i++)
printf("%d ",L->elem[i]);
printf("\n");Listtlength(L);printf("\n");
}
GetElem(Sqlist *L,int i,int *e1)//讀取指定位置的元素4
{
*e1=L->elem[i];
}
LocateElem(Sqlist *L,int n,int *e2)//查找某元素,并回傳第一次出現的位置5
{
int i,flag=0;
for (i=0;i<n;i++){
if (*e2==L->elem [i]) {
flag=1;
break; }
}if (flag==1) printf("該元素在線性表的第%d個位置\n",i+1);
else printf("該元素不在線性表中\n");
}
ListInsert(Sqlist *L,int i,int *e3)//將元素插入到指定位置6
{
int j=0;
(L->length)++;
for ( j=L->length; j>i; j--){
L->elem[ j-1]=L->elem[ j-2];
}
L->elem[i-1]=*e3;
printf("線性表長度增加1!!!此時線性表長度為%d\n", L->length);
/* printf("插入后線性表\n");
TraverseList(&L,L->length);
*/
}
ListDelete(Sqlist *L,int i)//洗掉指定位置的元素7
{
int j=0;
for (; i<(L->length ); i++){
L->elem[i]=L->elem[ i+1];
}
printf("線性表長度減小1!!!此時線性表長度為%d\n", --(L->length));
}
int main()
{
int n=0,i=0,num=0;
int e1=0,e2=0,e3=0;
printf("請輸入線性表元素個數:");
scanf("%d",&n);getchar();
Initlist(&L,n);
/*
//初始化1
Initlist(&L,n);
//求長度2
Listtlength(&L);
//遍歷3
TraverseList(&L,n);
//取某位置值4
printf("請輸入線性表元取值的位置:");
scanf("%d",&i);getchar();
GetElem(&L,i-1,&e1);
printf("線性表該位置的取值為%d\n",e1);
//查找某元素5
printf("請輸入想在線性表中查找的元素\n");
scanf("%d",&e2);getchar();
LocateElem(&L,n,&e2);
//將元素插入到指定位置6
printf("請分別輸入要插入線性表元中的元素位置和值:");
scanf("%d%d",&i,&e3);getchar();
ListInsert(&L,i,&e3);
printf("插入后線性表\n");
TraverseList(&L,L.length);
//洗掉指定位置的元素7
printf("請輸入要洗掉線性表元中的元素的位置:");
scanf("%d",&i);getchar();
ListDelete(&L,i-1);
printf("洗掉后線性表\n");
TraverseList(&L,L.length);
*/
printf("*************初始化請輸入 【1】\t*************\n");printf("*************求長度請輸入 【2】\t*************\n");
printf("*************遍歷請輸入 【3】\t*************\n");printf("*************取值請輸入 【4】\t*************\n");
printf("*************查找請輸入 【5】\t*************\n");printf("*************插入請輸入 【6】\t*************\n");
printf("*************洗掉請輸入 【7】\t*************\n");
while(1){
printf("************【請輸入:】");scanf("%d",&num);
switch( (int)num )
{
case 1:{ Initlist(&L,n); }break;
case 2:{ Listtlength(&L);}break;
case 3:{ TraverseList(&L,n); }break;
case 4:{ printf("請輸入線性表元取值的位置:");
scanf("%d",&i);getchar();
GetElem(&L,i-1,&e1);
printf("線性表該位置的取值為%d\n",e1); }break;
case 5:{ printf("請輸入想在線性表中查找的元素");
scanf("%d",&e2);getchar();
LocateElem(&L,n,&e2); }break;
case 6:{ printf("請分別輸入要插入線性表元中的元素位置和值:");
scanf("%d%d",&i,&e3);getchar();
ListInsert(&L,i,&e3);
printf("插入后線性表\n");
TraverseList(&L,L.length); }break;
case 7:{ printf("請輸入要洗掉線性表元中的元素的位置:");
scanf("%d",&i);getchar();
ListDelete(&L,i-1);
printf("洗掉后線性表\n");
TraverseList(&L,L.length); }break;
default :printf("輸入錯誤請重新輸入!!!");
}
}
}
//我大一資料結構課寫的你可以參考一下,寫的很爛,應該可以滿足你的要求
uj5u.com熱心網友回復:
那定義抽象資料型別與這些有什么關系呀
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/134411.html
標籤:C++ 語言
上一篇:哪位高手能給出個模板
下一篇:二級C語言的程式設計題
