完整代碼:
成都網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)的開發(fā),更需要了解用戶,從用戶角度來建設(shè)網(wǎng)站,獲得較好的用戶體驗。創(chuàng)新互聯(lián)多年互聯(lián)網(wǎng)經(jīng)驗,見的多,溝通容易、能幫助客戶提出的運(yùn)營建議。作為成都一家網(wǎng)絡(luò)公司,打造的就是網(wǎng)站建設(shè)產(chǎn)品直銷的概念。選擇創(chuàng)新互聯(lián),不只是建站,我們把建站作為產(chǎn)品,不斷的更新、完善,讓每位來訪用戶感受到浩方產(chǎn)品的價值服務(wù)。
#include stdio.h
#include stdlib.h
#include windows.h
#define MAXSIZE 100
typedef int datatype;
typedef struct{
datatype a[MAXSIZE];
int size;
}sequence_list;
void init(sequence_list *slt)
{
slt-size=0;
}
void append(sequence_list *slt,datatype x)
{
if(slt-size==MAXSIZE)
{
? printf("順序表是滿的");
exit(1);
}
slt-a[slt-size]=x;
slt-size=slt-size+1;
}
void display (sequence_list slt)
{
int i;
if(!slt.size)
printf("順序表是空的");
else
for(i=0;islt.size;i++)
printf("%5d",slt.a[i]);
printf("\n");
}
int empty (sequence_list *slt)
{
memset(slt,0,sizeof(sequence_list));
return(slt-size==0?1:0);
}
int find (sequence_list slt,datatype x)
{
int i=0;
while(islt.size slt.a[i]!=x)
i++;
return(islt.size ? i:-1);
}
datatype get(sequence_list slt,int i)
{
if(i0||i=slt.size)
{
printf("\n指定位置的節(jié)點不存在");
exit(1);
}
else
? return slt.a[i];
}
void insert(sequence_list *slt,datatype x,int position)
{
int i;
if(slt-size==MAXSIZE)
{
printf("\n順序表是滿的,無法插入");
exit(1);
}
if(position0||positionslt-size)
{
printf("\n指定的插入位置不存在");
exit(1);
}
姿改 for(i=slt-size;iposition;i--)
slt-a[i]=slt-a[i-1];
slt-a[position]=x;
slt-size++;
}
void dele(sequence_list *slt,int position)
{
int i;
if(slt-size==0)
{
printf("\n順序表是空的,無法刪除");
exit(1);
}
if(position0||position=slt-size)
{
printf("\n指定的刪除位置不存在");
exit(1);
}
for(i=position;islt-size-1;i++)
? slt-液冊辯a[i]=slt-a[i+1];
? slt-size--;
}
int main()
{
sequence_list slt;
bool exit_flag=false;
int fun_num=1;
datatype data=0;
int i=0;
printf("1.初始鬧缺化 ?2.增加節(jié)點 ?3.顯示 ?4.清空 ?5.查找\n6.獲取節(jié)點 7.插入節(jié)點 ?8.刪除節(jié)點 ?9.退出 ?0.清屏\n");
while (!exit_flag)
{
printf("請選擇功能:\n");
scanf("%d",fun_num);
switch (fun_num)
{
case 1:
init(slt);
break;
case 2:
printf("請輸入數(shù)據(jù):\n");
scanf("%d",data);
append(slt,data);
break;
case 3:
display (slt);
break;
case 4:
empty (slt);
break;
case 5:
printf("請輸入查找的數(shù)據(jù):\n");
scanf("%d",data);
printf("查找到的數(shù)據(jù)位置為:%d",find (slt,data));
printf("\n");
break;
case 6:
printf("請輸入數(shù)據(jù)位置:\n");
scanf("%d",i);
printf("該位置的數(shù)據(jù)為:%d",get(slt,i));
printf("\n");
break;
case 7:
printf("請輸入插入節(jié)點位置:\n");
scanf("%d",i);
printf("請輸入插入節(jié)點數(shù)據(jù):\n");
scanf("%d",data);
insert(slt,data,i);
break;
case 8:
printf("請輸入刪除節(jié)點位置:\n");
scanf("%d",i);
dele(slt,i);
break;
case 9:
exit_flag=true;
break;
case 0:
system("CLS");
printf("1.初始化 ?2.增加節(jié)點 ?3.顯示 ?4.清空 ?5.查找\n6.獲取節(jié)點 7.插入節(jié)點 ?8.刪除節(jié)點 ?9.退出 ?0.清屏\n");
break;
default:
break;
}
}
return 0;
}
效果如下圖,調(diào)試通過,所有功能好使
#include?stdio.h
#include?stdlib.h
typedef?int?DataType;?//?定義數(shù)據(jù)數(shù)據(jù)類型
typedef?struct?{
DataType?*data;???//?data指向數(shù)據(jù)區(qū)的首個數(shù)據(jù)
int?length;???????//?數(shù)據(jù)長度
}SqList;
void?Sort(SqList?*L)?{
int?i,j,k;
DataType?tmp;
for(i?=?0;?i??L-length?-?1;?++i)?{
k?=?i;
for(j?=?i?+?1;?j??L-length;?++j)
if(L-data[k]??L-data[j])
k?=?j;
if(k?!=?i)?{
tmp?=?L-data[k];
L-data[k]?=?L-data[i];
L-data[i]?=?tmp;
}
}
}
SqList?*CreateList(DataType?a[],int?n)?{
int?i;
SqList?*L;
L?=?(SqList?*)malloc(sizeof(SqList));
L-data?=?(DataType?*)malloc(n?*?sizeof(DataType));
L-length?=?n;
for(i?=?0;?i??n;?孝激++i)?L-data[i]?=?a[i];
Sort(L);
return?L;
}
int?InsertList(SqList?*L,DataType?x)?{
int?i,j;
for?(i?=?0;i??L-length;i++)?{
if(x?=?L-data[i])?{
for(j?=?L-length;j?=?i;j--)
L-data[j?+?1]?=?L-data[j];?//?結(jié)點后移
L-data[i]?=?x;
L-length++;
return?1;
}
}
L-data[L-length++]?=?x;
return?1;
}
int?RemoveListElem(SqList?*L,DataType?d)?{
int?i,j;
for(i?=?0;?i?悔高?L-length;?++i)?{
if(L-data[i]?==?d)?{
for(j?=?i;?j??L-length?-?1;?++j)
L-data[j]?=?L-data[j?+?1];
L-length--;
return?1;
}
}
return?0;
}
SqList?*AndList(SqList?*A,?SqList?*B)?{???/*?A∩B?*/
int?i,j,k?=?0;
int?len?=?(A-length??B-length)???B-length?:?A-length;
SqList?*C?=?(SqList?*)malloc(sizeof(SqList));
C-length?=?len;
C-data?=?(DataType?*)malloc(len?*?sizeof(DataType));
for(i?=?0;?i??A-length;?++i)?{
for(j?=?0;?j??B-length;?++j)?{
if(A-data[i]?==?B-data[j])?{
C-data[k++]?=?A-data[i];
break;
}
}
}
C-length?=?k;
return?C;
}
SqList?*OrList(SqList?*A,?SqList?*B)?{???/*?A∪B?*/
int?i,j,flag;
DataType?e;
SqList?*C?=?(SqList?*)malloc(sizeof(SqList));
C-length?=?A-length?+?B-length;
C-data?=?巧前襪(DataType?*)malloc(C-length?*?sizeof(DataType));
for(i?=?0;?i??A-length;?++i)?C-data[i]?=?A-data[i];
for(i?=?0;?i??B-length;?++i)?{
e?=?B-data[i];
flag?=?1;
for(j?=?0;?j??C-length;?++j)?{
if(e?==?C-data[j])?{
flag?=?0;
break;
}
}
if(flag)?InsertList(C,e);
}
return?C;
}
void?PrintList(SqList?*L)?{
int?i;
for(i?=?0;?i??L-length;?++i)
printf("%d?",L-data[i]);
printf("\n");
}
void?FreeList(SqList?*L)?{
free(L-data);
free(L);
}
void?main()?{
DataType?x;
DataType?arra[]?=?{36,24,31,5,90,65,70,39,37};
DataType?arrb[]?=?{9,8,43,51,37,89,33,46,29,80,56};
int?alen?=?sizeof(arra)/sizeof(arra[0]);
int?blen?=?sizeof(arrb)/sizeof(arrb[0]);
SqList?*A?=?CreateList(arra,alen);
printf("A線性表為:?");
PrintList(A);
SqList?*B?=?CreateList(arrb,blen);
printf("B線性表為:?");
PrintList(B);
SqList?*C?=?AndList(A,B);
SqList?*D?=?OrList(A,B);
printf("?C?=?A∩B:?");
PrintList(C);
printf("?D?=?A∪B:?");
PrintList(D);
printf("在D表中插入數(shù)據(jù)?:?");
scanf("%d",x);
InsertList(D,x);
printf("D表插入x后?:");
PrintList(D);
printf("刪除D表中數(shù)據(jù)?:?");
scanf("%d",x);
RemoveListElem(D,x);
printf("刪除x后的D表為?:");
PrintList(D);
FreeList(A);
FreeList(B);
FreeList(C);
FreeList(D);
}
先回答下第一個問題頃緩,子函數(shù)的實現(xiàn)方法可以放在使用它的主函數(shù)或者其它子函數(shù)后面,但是你的定義一定要在使用它之前;不然編譯器怎么知道你用的函正乎衡數(shù)square是什么,這就是我們經(jīng)常包含頭文件的一個目的,頭文件是一舉做些函數(shù)定義或者預(yù)編譯命令。
修改是在#includestdio.h后面加
int square(int num);
第二個問題:num是在main定義是可以在main作用域內(nèi)直接使用,或者當(dāng)做參數(shù)傳遞給子函數(shù),你的問題num為什么可以在子函數(shù)中用,首先你子函數(shù)的num并非main里的num只是你把他們名字寫成一樣了;main里num是通過值傳遞給子函數(shù)的num,實際他們兩個num的內(nèi)存地址是不一樣的,你子函數(shù)換個名字去理解一下。