#include stdio.h
創(chuàng)新互聯(lián)是專業(yè)的思南網(wǎng)站建設(shè)公司,思南接單;提供成都網(wǎng)站設(shè)計、成都做網(wǎng)站,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行思南網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊,希望更多企業(yè)前來合作!
#include malloc.h
# define MaxSize 50
typedef struct{
ElemType data[MaxSize];//存放順序表元素
int length;//存放順序表長度
}SqList;//順序表類型定義
//建立順序表
void CreateList(SqList *L,ElemType a[],int n){
int i;
for(i=0;in;i++){
L-data [i]=a[i];
}
L-length =n;
}
//順序表基本運(yùn)算算法
//初始化線性表InitList(L)
void InitList(SqList *L){
L=(SqList *)malloc(sizeof(SqList));//分配存放線性表的空間
L-length =0;
}//本算法的時間復(fù)雜度為O(1)
//銷毀線性表
void DestroyList(SqList *L){
free(L);
}//本算法的時間復(fù)雜度為O(1)
//判斷線性表是否為空
int ListEmpty(SqList *L){
return (L-length ==0);
}//本算法的時間復(fù)雜度為O(1)
//求線性表的長度
int ListLength(SqList *L){
return (L-length);
}//本算法的時間復(fù)雜度為O(1)
//輸出線性表
void DispList(SqList *L)
{
int i;
if(ListEmpty(L)) return;
for(i=0;iL-length;i++){
printf(nn,L-data[i]);
}
printf("\n");
}//本算法的時間復(fù)雜度為O(L-length)
//求線性表中某個數(shù)據(jù)的元素值
int GetElem(SqList *L,int i,ElemType e)
{
if(i1||iL-length)
return 0;
e=L-data[i-1];//這兒體現(xiàn)了數(shù)組的優(yōu)點(diǎn),可以直接通過下標(biāo)訪問
return 1;
}//本算法的時間復(fù)雜度為O(1)
//按元素的值查找
int LocateElem(SqList *L,ElemType e){
int i=0;
while(iL-length L-data[i]!=e)i++;
if(i=L-length)
return 0;
else
return i+1;
}//本算法中基本運(yùn)算為while循環(huán)中的i++語句,故時間復(fù)雜度為O(L-length)
//插入數(shù)據(jù)元素
int ListInsert(SqList *L,int i,ElemType e){
int j;
if(i1 || iL-length+1)
return 0;//參數(shù)錯誤,返回0
i--;//將順序邏輯位序變?yōu)槲锢砦恍?/p>
for(j=L-length;ji;j--){
L-data[j]=L-data[j-1];//將data[i]及后面的元素后移一個位置
}
L-data[i]=e;//插入元素e
L-length++;//增加長度
return 1;
}//本算法的平均時間復(fù)雜度為O(n)
//刪除數(shù)據(jù)元素
int ListDelete(SqList *L,int i,ElemType e){
int j;
if(i1 || iL-length)
return 0;
i--;//將順序邏輯位序變?yōu)槲锢砦恍?/p>
e=L-data[i];
for(j=i;jL-length-1;j++){
L-data[j]=L-data[j+1];//將data[i]之后的元素前移一個位置,這就是數(shù)組中的刪除思想
}
L-length--;
return 1;
}//本算法的平均時間復(fù)雜度為O(n)
函數(shù)中不會修改main()函數(shù)中定義的變量,修改如下:
//---------------------------------------------------------------------------
#include
#include
#define
LIST_INIT_SIZE
100
#define
LISTINCREMENT
10
typedef
int
ElemType[LIST_INIT_SIZE];
typedef
struct
{
ElemType
*elem;
int
length;
int
listsize;
}SqList;
typedef
int
Status;
int
InitList_Sq(SqList
*L)
/*注意這里*/
{
L-elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
/*注意這里*/
if(!L-elem)
/*注意這里*/
L-length=1;
/*注意這里*/
printf("%d\n",L-length);
/*注意這里*/
L-listsize=LIST_INIT_SIZE;
/*注意這里*/
return
1;
}
int
main()
{
SqList
p=;
/*注意這里*/
InitList_Sq(p);
/*注意這里*/
printf("%d\n",p.length);
return
0;
}
//---------------------------------------------------------------------------
#include
stdio.h
#include
malloc.h
/*包含頭文件*/
#define
INIT_SIZE
100
/*去除分號*/
typedef
int
ElemType;
typedef
struct{
ElemType
*elem;
int
length;
int
listsize;
}SqList;
//SqList
L;
不需要用全局變量
int
SqListInit(SqList
L)
/*刪除了*號,采用引用參數(shù)*/
{
L.elem=(ElemType
*)malloc(INIT_SIZE*sizeof(ElemType));
if(!L.elem)
return
0;
L.length=0;
L.listsize=INIT_SIZE;
return
1;
}
void
main()
{
SqList
L;
/*用局部變量*/
SqListInit(L);
/*調(diào)用時,去除實(shí)參參數(shù)類型*/
printf("當(dāng)前長度為%d\n",L.length);
printf("當(dāng)前空間為%d\n",L.listsize);
free(L.elem);
/*退出前最好要釋放L所用的堆空間*/
}
肯定是要分配空間的,你第一個程序的initsqlist函數(shù)中聲明的結(jié)構(gòu)體指針(Sqlist *a;),而第二個程序的initsqlist函數(shù)中是聲明的結(jié)構(gòu)體(Sqlist a;),前者只是在計算機(jī)內(nèi)存中聲明一個指針,而不會給這個指針分配內(nèi)存空間,所以你初始化的時候要給這個指針用malloc函數(shù)分配空間,而后者是實(shí)實(shí)在在的定義了一個結(jié)構(gòu)體,在內(nèi)存在不僅僅是一個地址,還分配了空間,就像你定義了一個數(shù)組一樣,已經(jīng)在內(nèi)存存在空間了,不需要再分配了。
總體來說就是你定義的是指針的話就要分配空間。
你的2個程序都是對的,但是一般用第一種定義鏈表!?。?/p>
不是inta[] ? 而是例如int a[10]這種。括號內(nèi)一定要有個常量數(shù)字。
我們可以這樣定義
#define N 5
int a[N]
這表明了數(shù)組名為a;數(shù)組有5個元素;分別是a[0]到a[4];
對于數(shù)組來說;數(shù)組是變量的集合,因此數(shù)組也具有與變量相同的數(shù)據(jù)類型和儲存類型。數(shù)組的類型就是它所有的變量的類型。在定義數(shù)組時,應(yīng)在數(shù)組名前對數(shù)組的類型加以確定。如上面的int a[10];則表明了數(shù)組內(nèi)元素均為整形。
所有當(dāng)表示浮點(diǎn)型可以定義為例如float a[10]。 舉例如下:
擴(kuò)展資料
數(shù)組名是由用戶命名的C語言標(biāo)識符,要遵循標(biāo)識符命名規(guī)則。數(shù)組名表示數(shù)組存儲區(qū)域的首地址。數(shù)組的首地址也就是第一個元素的地址。數(shù)組名是一個地址常量,不能對它賦值。
數(shù)組名后是由方括號括起來的常量表達(dá)式,不能使用其他括號