设为首页 加入收藏

TOP

数据结构中构建顺序表
2014-11-24 03:10:46 来源: 作者: 【 】 浏览:1
Tags:数据结构 构建 顺序

顺序表指的是数据元素在内存中连续分配地址的数组,由于指针无法指出数组长度,编译时不会报错,所有用结构体来表示一个顺序表:

顺序表用C语言的表示方法如下:

  #define OK 1
  #define ERROR -1
  typedef int elem_type;
  typedef int Statue;
 //  int Arrylength;
   typedef struct sqlist
   {
   	elem_type  *Arry;
   	int  Arrylength;
   	} Sqlist;
 
   //建立一个空表
  Statue Create_Sqlist(Sqlist *&S)
   {
    //S->Arry = (elem_type *) malloc(MaxSize*sizeof(elem_type));

	//L = (sqlist *)malloc(sizeof(sqlist));
   // L->data = (char *)malloc(maxsize);
    S = (Sqlist *)malloc(sizeof(Sqlist)); 
	S->Arry = (elem_type *)malloc(MaxSize);
   	if(!S->Arry)
   		{
   			return ERROR;
   			}
   	else
   		{
   			S->Arrylength = 0;
   			return OK;
	    }
   	}

//顺序表赋初始值
  void   Init_Sqlist(Sqlist *&S)
  {
  	int i;
  	for(i=0;i<20;i++)
  	{
  	   S->Arry[i]=rand()%100;
	   
  	   S->Arrylength++;
  	 }
  }
  	
//在第i个位置添加一个元素m
  Statue Insert_Sqlist(Sqlist *&S,int i,int InsertNum)
{
  	if(i<=0 && i>S->Arrylength) 
  		return ERROR;
  	else
  		{
  			int j;
  			for(j=0;j<=S->Arrylength-i;j++)
  			 S->Arry[S->Arrylength-j]=S->Arry[S->Arrylength-1-j];    //i以后元素往后移动一位
  			 S->Arry[i-1]=InsertNum;
  			 S->Arrylength++;
  			 return OK;
  		}
}

//将第i个元素删除
  Statue Delete_Sqlist(Sqlist *&S,int i)
{
  	if(i<=0 && i>S->Arrylength) 
  		return ERROR;
  	else
  		{
  			int j;
  			for(j=0;j<=S->Arrylength-i;j++)
  			  S->Arry[i-1+j]= S->Arry[i+j];
  			 S->Arrylength--;
  			 return OK;
  			}
}

//删除值为x的元素
  void DeleteX_Sqlist(Sqlist *&S,int x)
{
  	int i;
  	for(i=0;i< S->Arrylength;i++)
      {
      	if(x == S->Arry[i])	
      		{
      			//Delete_Sqlist( *S, i);
				int j;
  			    for(j=0;j<=S->Arrylength-i;j++)
  			      S->Arry[i+j]= S->Arry[i+j+1];
  			    S->Arrylength--;
      		}
      	}
}

  //打印函数
  void print(Sqlist *&S)
  { 
    int m;
	for(m=0;mArrylength;m++)		
		{
			cout<Arry[m];
			if((m+1)%4==0)
				cout<>i;cin>>InsertNum;
	cout<<"插入数操作如下:在第"<>k;
	cout<<"删除数操作如下:"<>j;
	cout<<"删除指定数操作如下:输入想要删除的数是:"< 显示结果如下: 
 

\

分析比较下面代码段的差别:

A段——建立空表没有bug的代码:

 typedef struct sqlist
   {
   	elem_type  *Arry;
   	int  Arrylength;
   	} Sqlist;
 
   //建立一个空表
  Statue Create_Sqlist(Sqlist *&S)
   {
        S = (Sqlist *)malloc(sizeof(Sqlist)); 
	S->Arry = (elem_type *)malloc(MaxSize);
   	}
B段——建立空表出现bug的代码:
typedef struct sqlist
   {
   	elem_type  Arry[MaxSize];
   	int  Arrylength;
   	} Sqlist;
 
   //建立一个空表
  Statue Create_Sqlist(Sqlist *S)
   {
    S->Arry = (elem_type *) malloc(MaxSize*sizeof(elem_type));  }
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇MySQL递归查询树状表的子节点、父.. 下一篇【个人机房重构】――创建数据库..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Shell 传递参数 (2025-12-25 00:50:45)
·Linux echo 命令 - (2025-12-25 00:50:43)
·Linux常用命令60条( (2025-12-25 00:50:40)
·nginx 监听一个端口 (2025-12-25 00:19:30)
·整个互联网就没有一 (2025-12-25 00:19:27)