主题:[原创]求实现顺序表的初始化、插入、删除操作
zcxpk
[专家分:0] 发布于 2008-05-04 21:24:00
1、用书22页的结构表示顺序表,(1)实现顺序表的初始化、插入、删除操作;(2)使用插入操作构建两顺序表(其元素按值非递减排列),要求归并这两顺序表,得到新的一顺序表,新顺序表的值也按非递减排列。 最好都做完耶 用数据结构解答 本人菜鸟不懂耶 有高手用意做下吗 感觉
回复列表 (共1个回复)
沙发
gj520yyy [专家分:0] 发布于 2008-05-05 10:37:00
#include<iostream>
using namespace std;
typedef struct LNode
{
int data;
struct LNode *next;
}LNode, *LinkList;
int GetElem_L(LinkList L,int i,int &e)
{
LinkList p=L->next;int j=1;
while(p&&j<i)
{
p=p->next;
++j;
}
if(!p||j>i)
return -1;
e=p->data;
return 1;
}
//逆序输入n个元素的值,建立代表头结点的单链表L
void CreateList_L(LinkList &L,int n)
{
LinkList p;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
// q=L;
for(int i=n;i>0;--i)
{
p=(LinkList)malloc(sizeof(LNode));
cin>>p->data;
p->next=L->next;
L->next=p;
}
}
//求表长的操作
int ListLength(LinkList L)
{
LinkList p;
int k;
k=0;
p=L->next;
while(p)
{
k++;
p=L-1;
p=p->next;
}
cout<<k;
return k;
}
//在线性表L中的第i个元素之前插入一个e
int ListInsert_L(LinkList &L,int i,int e)
{
LinkList p;
p=L;
int j=0;
while(p&&j<i-1)
{
p=p->next;++j;//寻找第i-1个结点
}
if(!p||j>i-1)return -1;
LinkList s=(LinkList)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
return 1;
}
//在线性表的第i个元素之前删除一个e
int ListDelete_L(LinkList &L,int i,int &e)
{
LinkList p,q;
int j;
p=L;
j=0;
while(p->next&&j<i-1)
{
p=p->next;++j;
}
if(!(p->next)||j>i-1)
return -1;
q=p->next;
p->next=q->next;
e=q->data;
free(q);
return 1;
}
//修改
int ChangeList_L(LinkList &L,int i,int a)
{
LinkList p=L;
int j=0;//int n;
//int e;
cout<<"请输入要修改的是第几个数(i)"<<endl;
cin>>i;
cout<<"请将第i个数修改为a"<<endl
<<"请输入a的值:"<<endl;
cin>>a;
//p=p->next ;
while(p&&j<i)
{ j++;
p=p->next ;
}
if(!p||j>i)
return -1;
p->data=a;
cout<<"显示该链表如下:"<<endl;
return 1;
}
//主函数
void main()
{
int e,s,m,n,t;
LinkList L;
CreateList_L(L,t);
cout<<"请输入要输入数据的个数:"<<endl;
cin>>n;
cout<<"请输入要输入的数据:"<<endl;
for(int i=1;i<=n;i++)
{
cin>>m;
ListInsert_L(L,i,m);
}//依次插入元素到表尾
cout<<"您输入的数据如下:"<<endl;
for(i=1;i<=n;i++)
{
GetElem_L(L,i,e);
cout<<e<<endl;
} //依次显示元素
ChangeList_L(L,i,e);
for(i=1;i<=n;i++)
{
GetElem_L(L,i,e);
cout<<e<<endl;
}
cout<<"请输入您要删除元素(或序号):"<<endl;
cin>>s;
cout<<"删除后结果显示如下:"<<endl;
ListDelete_L(L,s,e);
for(i=1;i<n;i++)
{
GetElem_L(L,i,e);
cout<<e<<endl;
}
cout<<"输出后数据长度为:"<<i-1<<endl;
// ListLength(L);
}
我来回复