数据结构——线性表—— 2016_10_13

                                                                      

                                                                   数据结构之线性表(C语言版)


#include<stdio.h>  
#include<stdlib.h>  
#define List_Init_Size 100  
#define LISTINCREMENT 10  
//定义线性表结构  
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;  
      
}  
//插入线性表  
void ListInsert_sq(Sqlist * L,int i,int e){  
    int *newbase;  
    int *p,*q;  
     if( i<1||i>(*L).length+1)  
         exit(0);  
     if((*L).length>=(*L).Listsize){   //注意:此处的>=是严蔚敏书上说的。其实==也行,因为length是递增的。我在VC++6.0上实验通过。  
         newbase=(int *)realloc((*L).elem,((*L).Listsize+LISTINCREMENT)*sizeof(int));  
         if(!(*L).elem)   
             printf("meiyou\n");  
         (*L).elem=newbase;  
          (*L).Listsize+=LISTINCREMENT;  
     }  
     q=&((*L).elem[i-1]);  
     for(p=&((*L).elem[(*L).length-1]);p>=q;p--)  
         *(p+1)=*p;  
     *q=e;  
     (*L).length++;  
  
}  
//删除节点  
void Listdel_sq(Sqlist *L,int i){  
      int *q,*p;  
      if((i<1)||(i>(*L).length))  
          exit(0);  
      q=&((*L).elem[i-1]);  
      for(p=&((*L).elem[(*L).length-1]);q<=p;q++)  
          *(q)=*(q+1);  
      (*L).length--;  
}  
//打印线性表  
void Listprint_sq(Sqlist * L){  
    int i;  
     for(i=1;i<=(*L).length;i++)  
     { printf("%d    ",(*L).elem[i-1]);  
         printf("%d\n",&(L->elem[i-1]));  //输出变量地址  
     }  
}  
//主函数  
int main(){  
      
   Sqlist M;  
   int i,k,x,y;  
     
   InitList_sq(&M);  
   printf("          初始化线性表.......\n");  
   for(i=1;i<=12;i++)  
   ListInsert_sq(&M,i,i);  
   printf("十二个数字的线性表已经建立\n");  
   Listprint_sq(&M);  
   printf("~~~~~~~~~~~请输入序号进行操作:\n");  
       printf("1:插入      2:删除      3:退出\n");  
         
    scanf("%d",&k);  
   while(k!=3){  
   switch(k)  
   {  
       case 1: printf("请输入要插入元素的位置和值\n");  
               scanf("%d%d",&x,&y);  
               ListInsert_sq(&M,x,y);  
               Listprint_sq(&M);  
               break;  
       case 2:   printf("请输入要删除元素的位置\n");  
                scanf("%d",&x);  
                Listdel_sq(&M,x);  
                Listprint_sq(&M);  
                break;  
       default:  
                printf("非法输入\n");  
   }  
       printf("~~~~~~~~~~~~~~~~~~~请输入序号进行操作:\n");  
       printf("1:插入      2:删除      3:退出\n");  
   scanf("%d",&k);  
   }  
   exit(0);  
   return 0;  
} 


程序运行图:




                          联系方式 :xhsgg12302@outlook.com        

                                                                         

                                                                                                                                                                 2016_10_13

转载于:https://www.cnblogs.com/Obelia/p/7256247.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值