c语言建立顺序表 存储并输出,请教数据结构课程中怎么建立顺序表,显示,输出,从头到尾详细点最好加讲解,希望大家能帮这个小忙...
#include
#define MAXSIZE 20
typedef int ElemType;
typedef struct
{
ElemType elem[MAXSIZE];
int length;
}SqList;//順序表結構定義void InitList(SqList &L)
{
//初始化函數//操作結果:構造一個空在順序線性表 L.length=0;
return;
}
void ClearList(SqList &L)
{
//清表函數//操作結果:將L置為空表 L.length=0;
return;
}
int ListLength(SqList L)
{
//求表長函數//操作結果:返回表中元素個數 return L.length;
}
int ListEmpty(SqList L)
{
//判空函數//初始條件:順序線性表L已存在//操作結果:如果不空返回0,否則返回非0值 if(L.length==0)return 1;
else
return 0;
}
/int GetElem(SqList L,int i,ElemType &e)
{
//取元素函數//初始條件:順序線性表L已存在,1<=i<=ListLength(L)//操作結果:用e返回L中第i個元素的值 if(i<1||i>L.length)
{
printf("i值越界!\n");
return 0;
}
e=L.elem[i-1];
return 1;
}
int LocateElem(SqList L,ElemType e)
{
//定位函數//初始條件:順序線性表L已存在,e為指定的查找元素//操作結果:返回L中第1個與e相等的元素位序,若這樣在元素不存在,則返回0 int i=0;
while(i
++i;
if(i<=L.length)
return i;
else
return 0;
}
int PriorElem(SqList L,ElemType cur_e,ElemType &pre_e)
{
//求前驅函數//初始條件:順序表已存在//操作結果:若存在元素cur_e,且是第一個元素,返回0;若不是第一個元素,則返回前驅元素的值 int i;
i=LocateElem(L,cur_e);
if(i)
{
// if(i==1)
{
printf("這是第一個元素,沒有前驅!!!\n");
return 0;//操作失敗 }
else
{
pre_e=L.elem[i-1];
return 1;
}
}
else
{
printf("中不存在此元素!\n");
return 0;//操作失敗 }
}
int NextElem(SqList L,ElemType cur_e,ElemType &next_e)
{
//求后繼函數//初始條件:順序表已存在//操作結果:若存在元素cur_e,且是最后一個元素,返回0;若不是最后一個元素,則返回后繼元素的值 int i;
i=LocateElem(L,cur_e);
if(i)
{
// if(i==L.length-1)
{
printf("這是最后一個元素,沒有后繼!!!\n");
return 0;//操作失敗 }
else
{
next_e=L.elem[i+1];
return 1;
}
}
else
{
printf("不存在此元素!\n");
return 0;//操作失敗 }
}
int ListInsert(SqList &L,int i,ElemType e)
{
//插入函數//初始條件:順序線性表L已存在,1<=i<=ListLength(L)+1//操作結果:在L中第i個位置前插入新的數據元素e,L的長度加1 int j;
if(i<1||i>L.length+1)
{
printf("插入越界!\n");
return 0;//插入失敗 }
if(L.length>=MAXSIZE)
{
printf("順序上溢!\n");
return 0;//插入失敗 }
for(j=L.length-1;j>=i-1;--j)
{
L.elem[j+1]=L.elem[j];
}
L.elem[i-1]=e;
++L.length;
return 1;//成功插入}
int ListDelete(SqList &L,int i,ElemType &e)
{
int j;
if(i<1||i>L.length)
{
printf("i值越界!");
return 0;//操作失敗 }
if(ListEmpty(L))
{
printf("L為空表,不能執行刪除操作!\n");
return 0;//操作失敗 }
e=L.elem[i-1];
for(j=i;j<=L.length-1;j++)
{
L.elem[j-1]=L.elem[j];
}
L.length--;
return 1;//操作成功}//void ListTraverse(SqList L)
{
//輸出函數//初始條件:順序表衣襟存在//操作結果:若順序表非空,則輸出順序表中所有元素,否則為空操作 int i;
for(i=0;i
{
printf("%5d",L.elem[i]);
}
return;
}
int main(void)
{
SqList L;
int i,s,e;
InitList(L);/創建一個空的順序表L if(ListEmpty(L))
{
printf("順序表L是一個空表!\n");
}
else
{
printf("順序表L不是一個空表!\n");
}
///if語句的輸出結果為: printf("\n1~10:\n");
for(i=1;i<=10;i++)
{
ListInsert(L,1,i);///調用插入函數 }
ListTraverse(L);///輸出結果為: printf("\n刪除指定的元素(輸入序號):");
scanf("%d",&i);
ListDelete(L,i,e);
printf("\n刪除的第%d個元素的值為%d\n",i,e);
printf("\n刪除后元素后順序表中的元素值為:\n");
ListTraverse(L);
printf("\n查找前驅操作:\n");
printf("\n輸入元素:");
scanf("%d",&s);
if(!PriorElem(L,s,e))
{
printf("\n元素%d沒有前驅!\n",s);
}
else
{
printf("\n元素%d的前驅為:%d\n",s,e);
}
printf("\n查找后繼元素操作:\n");
printf("\n輸入元素:\n");
scanf("%d",&s);
if(!NextElem(L,s,e))
{
printf("\n元素%d沒有后繼!\n",s);
}
else
{
printf("\n元素%d的后繼為:%d\n",s,e);
}
/*printf("\n\n");
printf("");
scanf("%d",&s);
if(!NextElem(L,s,e))
{
printf("\n%\n",s);
}
else
{
printf("\n%d%d\n",s,e);
}*/
printf("\n");
return 0;
}
總結
以上是生活随笔為你收集整理的c语言建立顺序表 存储并输出,请教数据结构课程中怎么建立顺序表,显示,输出,从头到尾详细点最好加讲解,希望大家能帮这个小忙...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 中创建数据端口_java 如何
- 下一篇: C++的六个默认函数