顺序表的生成和插入

来源:互联网 发布:界面设计用什么软件 编辑:程序博客网 时间:2024/05/28 05:13

// Mergelist.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <cstdlib>  
#include <iostream> 
#include <stdio.h>
 
#define list_init_size 100
#define listincrement 10
   void InitList_Sq();
   void ListInsert_Sq();
   void Creat();
typedef struct{
   int *elem;
   int length;
   int lisesize;
   int *newbase;
  

}SqList;
SqList L;
 void InitList_Sq(){
  
        L.elem=(int*)malloc(list_init_size*sizeof(int));
  if(!L.elem)
  {
  printf("The memory is full"); 

  exit(1);
  }
  L.length=0;
  L.lisesize=list_init_size; 
}
 //建立顺序表
 void Creat(){
 int a,b,i=0;
 printf("请输入结点数:\n");
 scanf_s("%d",&a);
 printf("请输入各个结点的值:\n",i);
 if(a>list_init_size-1||a<0){
  printf("分配失败\n");
  exit(1);

 };
 for (i=0;i!=a;++i){
 scanf_s("%d",&b);
 L.elem[i]=b;
 ++L.length;
  }
  }
//插入元素操作
void ListInsert_Sq(){
int e,i;
int *q,*p;
 printf("请输入插入结点的值:\n");
    scanf_s("%d", &e);
    printf("请输入插入结点的位置:\n");
    scanf_s("%d", &i);
if(i<1||i>L.length+1)
 exit(1);
if(L.length>=L.lisesize){
 L.newbase=(int*)realloc(L.elem,(L.lisesize+listincrement)*sizeof(int));
 if(!L.newbase){
 printf("The memory is full"); 
  exit(1);
 }
 L.elem=L.newbase;
 L.lisesize+=listincrement;
}
q=&(L.elem[i-1]);
for(p=&(L.elem[L.length=1]);p>=q;--p)
 *(p+1)=*p;
*q=e;
++L.length;

//插入后值
printf("插入后值表为:\n");
for(int i=0;i<=L.length;i++){
 printf("%d\t",L.elem[i]);
}
}

int main()
{
  InitList_Sq();
  Creat();
     ListInsert_Sq();
   system("PAUSE");
}

 

原创粉丝点击