// 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");
}