/*
用C语言编写一个程序,实现顺序表的各种基本运算,以下各功能分别用一个函数来实现,并在此基础上设计一个主函数进行验证各函数的正确性:
(1)初始化顺序表L。(必做)
(2)输出顺序表L。(必做)
(3)输出顺序表L的长度。(必做)
(4)判断顺序表L是否为空。
(5)输出顺序表L的第i个元素的值。
(6)输出元素x的位置。
(7)在第i个元素位置上插入x元素。
(8)删除L的第i个元素。
(9)删除L中值为x的元素。
注:(1)~(3)为必做的内容,(4)~(9)可任选两个。
*/
/*
缺点为:
1.数组的大小缺乏动态分配
2.链表的容量不能动态增加
*/
#include
typedef int ElemType;
#define MaxSize 1024
typedef struct
{
ElemType data[MaxSize];
int length;
int list_size;
}SqList,*pSqList;
/*
(1)初始化顺序表L。(必做)
*/
void InitList(SqList &L)
{
L.length=0;
}
/*
(1)输出顺序表L。。(必做)
*/
int GetLength(SqList L)
{
return L.length;
}
int GetElem(SqList L,int i,ElemType &e)
{
if (i<1||i>L.length)
{
return 0;
}
else
{
e=L.data[i-1];
return 1;
}
}
int Locate(SqList L,ElemType x)
{
int i=0;
while (L.data[i]!=x)
{
i++;
}
if (i>L.length)
{
return (0);
}
else
{
return(i+1);
}
}
int InsElem(SqList &L,ElemType x,int i)
{
int j;
if(i<1||i>L.length+1)
{
return 0;
}
for(j=L.length;j>i;j--)
{
L.data[j]=L.data[j-1];
}
L.data[i-1]=x;
L.length++;
return 1;
}
int DelElem(SqList &L,int i)
{
int j;
if(i<1||i>L.length)
{
return 0;
}
for(j=i;j {
L.data[j-1]=L.data[j];
}
L.length--;
return 1;
}
void DispList(SqList L)
{ int i;
for(i=1;i<=L.length;i++)
printf("%c",L.data[i-1]);
printf("\n");
}
/*
合并两个线性顺序表
*/
int MergerList(SqList & pa,SqList &pb,SqList &pc)
{
return 1;
}
int main(char argc,char ** argv)
{
int i;
ElemType e;
SqList L;
InitList(L);
InsElem(L,'a',1);
InsElem(L,'c',2);
InsElem(L,'a',3);
InsElem(L,'e',4);
InsElem(L,'d',5);
InsElem(L,'b',6);
printf("xian xing biao:");
DispList(L);
printf("chang du:%d\n",GetLength(L));
i=3;GetElem(L,i,e);
printf("di %d ge yuan su :%c\n",i,e);
e='a';
printf("yuan su %c shi di %d ge yuan su\n",e,Locate(L,e));
i=4;printf("shan chu di %d ge yuan su\n",i);
DelElem(L,i);
printf("xian xing biao:");DispList(L);
return 0;
}
阅读(1789) | 评论(0) | 转发(0) |