数据结构中的顺序表的插入和删除问题

#include <stdio.h>
#include <malloc.h>
#define maxsize 100

typedef struct
{
int data[maxsize];
int last;
}sequenlist;
void Initialize(sequenlist *L);
void show(sequenlist *L);
int Delete(sequenlist *L,int i);
int Insert(sequenlist *L,int x,int i);
void main()
{
sequenlist *L;
L=(sequenlist *) malloc(sizeof(sequenlist));

Initialize(L); //顺序表的初始化
printf("操作之前顺序表:\n");
show(L);
/////////////////////////////////////////////////////////
///在此添加插入或删除函数的调用
// Insert(L,23,4);
/////////////////////////////////////////////
printf("操作: Insert(L,23,4) 之后顺序表:\n");
show(L);//显示顺序表中的内容
}

int Insert(sequenlist *L,int x,int i)
{ Statues ListInsert_Sq(Sqlist &L,int i, ElemType e)

//在此处实现插入功能

return(1);
}

int Delete(sequenlist *L,int i)
{
//在此处实现删除功能

return(1);
}
void Initialize(sequenlist *L)
{
printf("请输入初始化数据(以'-1'结束):\n");
int b;
int i=0;
L->last=-1;
scanf("%d",&b);
while(b!=-1)
{
L->data[i]=b;
i++;
L->last++;
scanf("%d",&b);
}

}
void show(sequenlist *L)
{
int i;
if(L->last==-1)
{
printf("顺序表中没有元素!\n");
return;
}
else
{
for(i=0;i<=L->last;i++)
printf("%d\n",L->data[i]);
}
}
以上是我们实验的内容,在程序中插入和删除顺序表。。求各位大神指条明路。。我是初学者
。。最好能把原程序写给我,,谢谢!!!!在线等。。

#include "stdlib.h"
#include "stdio.h"
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 50
typedef struct { 
int* elem; 
int length; 
int listsize; 
} SqList;
bool InitList_Sq(SqList &L){
 L.elem=(int *)malloc(sizeof(int)*LIST_INIT_SIZE);
 if(!L.elem) exit(1);
 L.length=0;
 L.listsize=LIST_INIT_SIZE ;
 return 1;
}
void Create_Sq(SqList &L,int i){
 for(int j=0;j<i;j++)
 {scanf("%d",&L.elem[j]);
 L.length++;
   if(L.elem[j]>100)
   { j--;L.length--;}
   }
}
  
bool ListInsert_Sq(SqList &L, int i, int x) {
  int *p;
  if (i < 1 || i > L.length+1) return false;  
  if (L.length >= L.listsize) {   
    int *newbase = (int *)realloc(L.elem,
                  (L.listsize+LISTINCREMENT)*sizeof (int));
    if (!newbase) return false;   
    L.elem = newbase;             
    L.listsize += LISTINCREMENT;  
  }
  int *q = &(L.elem[i-1]);  
  for (p = &(L.elem[L.length-1]); p>=q; --p) *(p+1) = *p;
                                   
  *q = x;       
  ++L.length;   
  return true;
} // ListInsert_Sq

bool ListDelete_Sq(SqList &L, int i) {
 if(i>L.length||i<=0)
     return false;
  printf("数值%d",L.elem[i-1]);
 for(int j=i-1;j<L.length-1;j++)
 {
    L.elem[j]=L.elem[j+1];
 }
 L.length--;
 return true;
}
  
void printList_Sq(SqList L){
 if(L.length>0){
  int i;
  printf("元素的顺序是:\n");
        for(i=1;i<L.length+1;i++){
   printf("%d\n",L.elem[i-1]);
  }
  printf("\n");
 }
}
void main()
{
    int i,x;
    SqList L;
    while(1)
    {
    InitList_Sq(L);
    printf("输入元素个数:");
    scanf("%d",&i);
    Create_Sq(L,i);
    printList_Sq(L);
    printf("输入插入位置:");
    scanf("%d",&i);
    printf("输入插入数值:");
    scanf("%d",&x);
    if(ListInsert_Sq(L,i,x))
        printf("插入成功\n");
    else
        printf("插入失败\n");
    printList_Sq(L);
    printf("输入删除位置:");
    scanf("%d",&i);
        if(ListDelete_Sq(L,i))
        printf("删除成功\n");
    else
        printf("删除失败\n");
    printList_Sq(L);
    system("pause");
    }
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-10-19
顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。
线性表采用顺序存储的方式存储就称之为顺序表。
顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。
将表中元素一个接一个的存入一组连续的存储单元中,这种存储结构是顺序结构。 采用顺序存储结构的线性表简称为“ 顺序表”。
顺序表的存储特点是:只要确定了起始位置,表中任一元素的地址都通过下列公式得到:LOC(ai)=LOC(a1)+(i-1)*L 1≤i≤n 其中,L是元素占用存储单元的长度。
顺序表的结构定义:
#define maxlen 50 //定义顺序表中元素个数最多有几个
typedef struct
{
elementtype data[maxlen]; //elementtype是元素的类型 依具体情况而定 int listlen; //便于时刻了解顺序表里元素的个数
}seqlist; //顺序表的名称 不妨为seqlist
声明顺序表类型变量:
seqlist L,L1;
如顺序表的每个结点占用len个内存单元,用location (ki)表示顺序表中第i个结点ki所占内存空间的第1个单元的地址。则有如下的关系:
location (ki+1) = location (ki) +len
location (ki) = location(k1) + (i-1)len
存储结构要体现数据的逻辑结构,顺序表的存储结构中,内存中物理地址相邻的结点一定具有顺序表中的逻辑关系。
相似回答