求一完整程序:在线性表顺序存储结构中插入一元素(请用C语言表述)!谢谢!

如题所述

第1个回答  2007-12-06
#define ListSize 100//表空间长度
typedef char DataType;
typedef struct
{
DataType data;
int length;
}SeqList;
void Insert(SeqList* L, DataType x, int i)
{
assert(i>0 && i<L->lenght+1)
assert(L->Length < ListSize)
for(j=L->length-1; j>=i-1; j--)
{
L->data[j+1]=L->data[j]
}
L->data[i-1]=x;
L->lenght++;
}
第2个回答  2007-12-06
#include<iostream.h>
#include<malloc.h>
#include<conio.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define ERROR 0
#define OK 1

typedef int ElemType;

struct LNODE
{
ElemType data;
struct LNODE *next;
};

typedef struct LNODE LNode;
typedef struct LNODE *LinkList;

//初始化单链表
int init(LinkList &L)
{
L=(LNode *)malloc(sizeof(LNode));
if(!L) return(ERROR);
L->next=NULL;
return OK;
}/*init */

//求表长
int ListLength(LinkList L)
{
int j=0;
while (L->next)
{
L=L->next;
j++;
}
return j;
}

//获取表中第i个元素的值
int GetElem(LinkList L,int i,ElemType &e)
{
LinkList p; int j;
p=L->next;j=1;
while(p&&j<i)
{
p=p->next;++j;
}
if(!p||j>i) return ERROR;
e=p->data;
return OK;
}

//判断元素e是否在该链表中
int LocateElem(LinkList La,ElemType e)
{
LinkList p;
p=La;
int i=0;
while(p->next)
{
p=p->next;
i++;
if(p->data==e)
return i;
}
return 0;
}

//打印表中元素值
void PrintList(LinkList L)
{

LinkList p;
p=L;
while(p->next)
{
p=p->next;
cout<<p->data<<ends;
}
cout<<endl;
}

//插入操作
int ListInsert(LinkList &L,int i,ElemType e)
{
LinkList p,s;
int j;
p=L;j=0;
while(p&&j<i)
{
p=p->next;
++j;
}
if(!p||j>i-1) return ERROR;
s=(LinkList)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
return OK;
}/*ListInsert Before i */
//删除操作
int ListDelete(LinkList &L,int i,ElemType &e)
{
LinkList p,q;
int j;
p=L;j=0;
while(p&&j<i-1)
{
p=p->next;
++j;
}
if(!p||j>i) return ERROR;
q=p->next;
p->next=p->next->next;
e=q->data;
free(q);
return OK;
}

// 头插法建表
int CreateList(LinkList &L,int n)
{
LinkList p;
L=(LinkList)malloc(sizeof(LNode));
if(!L) return ERROR;
L->next=NULL;
for(int i=n;i>0;i--)
{
p=(LinkList)malloc(sizeof(LNode));
if(!p) return ERROR;
cin>>p->data;
p->next=L->next;L->next=p;
}
return OK;
}
//合并两个有序表
void MergeList(LinkList La,LinkList Lb,LinkList &Lc)
{
LinkList pa,pb,pc;
pa=La->next;pb=Lb->next;
Lc=pc=La;
while(pa && pb)
{
if(pa->data<=pb->data)
{
pc->next=pa;pc=pa;pa=pa->next;
}
else
{
pc->next=pb;pc=pb;pb=pb->next;
}
}
pc->next=pa?pa:pb;
free(Lb);
}

void main()
{
LinkList La,Lb,Lc;
ElemType e;
cout<<"\n\n-------------------List Demo is running...----------------\n\n";
cout<<"First is InsertList function.\n";
init(La);
int n;
cout<<"请输入La表中元素个数:";
cin>>n;
cout<<endl<<"请输入"<<n<<"个元素值:";
CreateList(La,n);
PrintList(La);
cout<<"La的表长为:"<<ListLength(La)<<endl;
//取值
cout<<"取第i位元素的值:\n请输入位序:";
cin>>n;
GetElem(La,n,e);
cout<<endl<<"第"<<n<<"位元素的值为:"<<e<<endl;
//定位
cout<<"定位操作:\n请输入要查找的元素:";
cin>>e;
cout<<endl<<" 所要查找的元素在表中第"<<LocateElem(La,e)<<"位\n";
//删除
cout<<"删除操作:\n输入要删除元素的位序:";
cin>>n;
ListDelete(La,n,e);
cout<<"\n要删除的元素值为:"<<e<<endl;
cout<<"删除后表中值有:"
PrintList(La);

init(Lb);
cout<<"请输入Lb表中元素个数:";
cin>>n;
cout<<endl<<"请输入"<<n<<"个元素值:";
CreateList(Lb,n);
PrintList(Lb);
cout<<"Lb的表长为:"<<ListLength(Lb)<<endl;
cout<<"合并两个有序表:\n";
MergeList(La,Lb,Lc);
PrintList(Lc);
getch();
}本回答被网友采纳
相似回答