c语言顺序表的创建程序

c语言顺序表的创建程序,第1张

/*

 *程序不足之处:1,main函数不应键型该为 void main

 *                        2,创建空的顺序表函数中 SqList L//定义顺序表L L是局部变量,

函数结束即销毁,应该用指针代替

 *                        3,SqList CreateList(SqList L)  //创建顺序表(非空)函数中:

scanf("%d",&L.elem)L里面的elem本来就是地址,

没必要 再加&符号,且每次输入都一直放在首地址,

    没达到程序所要表达的意思

 *                        4,void print(SqList L)  //输出当前顺序表 函数中:

printf("%-3d",L.elem)和上面是一样的道理

 *                        5,main函数中没有将申请的内存释放

 *现将程序稍作修改如下,望采纳

 */

#include<stdio.h>

#include<stdlib.h>

#define LIST_INIT_SIZE 100

#define Icreament 20

typedef int ElemType  //用户自定义数据元素类型

typedef struct

          ElemType *elem  //顺序表的基地址 

          int length  //顺序表的当前长度 

          int listsize  //预设空间容量

}SqList  //线性表的顺序存储结构

SqList* InitList()  //创建空的顺序表

           SqList* L = (SqList*)malloc(sizeof(SqList))//定义顺序表L

          if(!L)

         {

       塌掘       printf("空间划分失败,程序退出\n")  

              return NULL 

        }

       L->elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType)) 

        if(!L->elem)

       {  

             printf("空间划分失败,程序退出\n")  

             return NULL 

      } 

       L->length=0 

        L->listsize=LIST_INIT_SIZE 

       return L

}

int CreateList(SqList* L)  //创建顺序表(非空)

          int number  //顺序表中元素的个数 

           int i  //循环变量 

            printf("请输入顺序表中元素的个数:") 

            scanf("%d",&number)

            if(number >LIST_INIT_SIZE)   团亮核//一定要判断输入的个数是否大于顺序表的最大长度

            {

                    printf("输入个数大于顺序表的长度\n")

                  return 0

             }

 for(i=0i<numberi++) 

        { 

               printf("输入第%d个数: ",i+1) 

               scanf("%d",L->elem+i)   //L->elem+i:每次的输入都保存在顺序表元素中的下一个地址,而不是一直放在元素的首地址

         }//给顺序表中每个数据元素赋值

        L->length=number  //当前顺序表的长度 

       return 1

}

void print(SqList* L)  //输出当前顺序表

{

          int i 

          for(i=0i<L->lengthi++)

         {

               printf("%-3d",*(L->elem + i)) //L->elem+i:和输入是一个道理

         } 

          printf("\n")

}

int main()

           SqList* L = InitList()  //申请一个指向顺序表的指针,并对其初始化

           if(!L)      //判断申请是否成功

          {

                printf("初始化线性表失败\n")

                return 1

           }

          if(!CreateList(L))   //判断创建顺序表是否成功

         {

               printf("创建顺序表失败\n")

             return 1

         }

            print(L)     //打印顺序表

         free(L->elem)    //释放申请的顺序表元素的内存

        free(L)     //释放申请的顺序表内存

          return 0

}

运行效果如图:

#include <stdio.h>

#define LIST_INIT_SIZE 10

#define LISTINCREMENT 10

#define ERROR 0

typedef struct{

 int *elem

 int length

 int listsize

} SqList

void InitList_Sq(SqList *l)

{

 l->elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int))

 if(!l->elem) exit(0)

 l->length=0

 l->listsize=LIST_INIT_SIZE

}

int InList(SqList 缺态*l)

{

 int *p,*newbase

 p=l->elem

 while(1)

 {

  for(p<l->elem+l->listsizep++)

  {

   scanf("%d",p)if(*p==-1) breakl->length++

  }

  if((p==l->elem+l->listsize))

  {

   newbase=(int *)realloc(l->elem,(l->listsize+LISTINCREMENT)*sizeof(int))

   p=l->elem+l->length

   l->listsize=l->listsize+LISTINCREMENT 

   if(!l->elem) return ERROR

  }

  if(*p==-1) break

 }

 return 1 

}

void PrList(SqList *l)

{

 int *p,i

 p=l->elem

 for(p<l->elem+l->lengthp++)

 printf("%d ",*p)

}

int ListInsert_sq(SqList *l,int i,int e)

{

 int *newbase,*p,*q

 if(i<1||i>l->length) return ERROR

 if(l->length==l->listsize)

 {

  newbase=(int *)realloc(l->elem,(l->listsize+LISTINCREMENT)*sizeof(int))

  if(!newbase) return ERROR

  l->elem=newbase

  l->listsize+=LISTINCREMENT

 }

 q=l->elem+i-1

 for(p=l->elem+l->length-1p>=qp--)

 *(p+1)=*(p)

 *q=e

 l->length+=1

 return 1

}

int ListDelet_sq(SqList *l,int i)

{

 int *p,e

 if((i<1)||(i>l->length)) return ERROR

 p=l->elem+i-1

 e=*p

 for(p<l->elem+l->length-1p++)

 *p=*(p+1)

 l->length--

 printf("要删除的元素是:%d\n",e)

 return 1

}

void main()

{

 int i,j,n

 char a

 SqList la

 InitList_Sq(&la)

 printf("请输入顺序表中的元素:\n")

 if(!InList(&la)) return ERROR

 do

 {

  printf("请输入需要插入元素的位置及元素:(a,b)\n")

  scanf("%d,%d",&i,&j)

  if(!ListInsert_sq(&la,i,j)) return ERROR

  printf("是否还需要插入元素?(伏巧源N/Y)")

  getchar()

  scanf("%c",&a)

  if(a=='N'||a=='n') break

 }while(1)

 do

 { 

  printf("请输入需要删除宽裤元素的位置:\n")

  scanf("%d",&i)

  if(!ListDelet_sq(&la,i)) return ERROR

  printf("是否还需要删除元素?(N/Y)")

  getchar()

  scanf("%c",&a)

  if(a=='N'||a=='n') break

 }while(1)

 printf("最后的顺序表为:\n")

 PrList(&la) 

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/8217797.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存