求助:关于数据结构的一个题目,帮小弟解决哈!(急!)

litawx 2005-05-18 11:02:03
基本要求:1 初始化一个顺序表
2 实现插入算法
a 插入第i个元素,分别将2 4 6 8 10 12 14依次插入到顺序表中
b 有一个已按递增次序排好序的线形表,今输入一个数,要求按原来的排序规律将它插入到线形表中
提示:编写一个顺序表的插入函数,在测试时,可按递增次序输入数据,然后从菜单中选择所新建的函数
3 实现线形表的删除算法
a 删除第i个元素
b 删除数据为x的元素
4 已知一个线形表,用另辟空间和利用原表两种防哪个法把线形表逆置

要编一个完整能执行的程序,实现以上功能!

多谢各位兄弟!
...全文
211 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
benben128 2005-05-19
  • 打赏
  • 举报
回复
我也问一道题,编写构造十字链表的算法,并进一步编写两个用十字链表描素的稀疏矩阵加法算法 ,谢谢
du51 2005-05-19
  • 打赏
  • 举报
回复
TC下的.
-------------------------------
#include<stdio.h>
#include<stdlib.h>
#define LIST_INIT_SIZE 5
#define LIST_INCREAMENT 2
#define ERROR 0
#define OK 1
#define OVERFLOW 2
typedef int Status;
typedef struct SqListTag{
int *base,length,listsize;
}SqList;
void InitList(SqList *L)
{
L->base=(int *)malloc(sizeof(int)*LIST_INIT_SIZE);
if(!L->base)exit(OVERFLOW);
L->length=0;
L->listsize=LIST_INIT_SIZE;
}
Status ListInsert(SqList *L,int i,int e)
{
int *p,*q;
if(i<1||i>L->length+1)return ERROR;
if(L->length>=L->listsize)
{
L->listsize+=LIST_INCREAMENT;
if(!(L->base=(int *)realloc(L->base,L->listsize*sizeof(int))))
exit(OVERFLOW);
}
if(!L->length){L->base[L->length++]=e;return OK;}
for(p=L->base+L->length-1,q=L->base+i-1;p>=q;p--)*(p+1)=*p;
*q=e;L->length++;
return OK;
}
Status OrderInsert(SqList *L,int e)
{
int *p=L->base,i=0;
if(!L->length)return ListInsert(L,1,e);
while(i<L->length)
{
p=L->base+i;
if(*p>e)break;
i++;
}
return ListInsert(L,i+1,e);
}
Status DelIElem(SqList *L,int i)
{
int j;
if(i<1||i>L->length)return ERROR;
for(j=i+1;j<=L->length;j++)L->base[j-2]=L->base[j-1];
L->length--;
return OK;
}
Status DelXElem(SqList *L,int x)
{
int i=0;
while(i<L->length)if(&L->base[i++]==x)break;
return DelIElem(L,i);
}
Status RevList(SqList *L)
{
int i,temp;
if(!L->base)return ERROR;
for(i=0;i<L->length-1-i;i++)
{
temp=L->base[i];
L->base[i]=L->base[L->length-1-i];
L->base[L->length-1-i]=temp;
}
return OK;
}
void DelList(SqList *L)
{
if(&L->base)free(&L->base);
L->base=0;
L->length=L->listsize=0;
}
Status RevList1(SqList *L)
{
SqList *LL;int i;
InitList(LL);
if(!L->base)return ERROR;
for(i=0;i<L->length;i++)ListInsert(LL,1,L->base[i]);
DelList(L);
*L=*LL;
return OK;
}
void ShowList(SqList L)
{
int i=0;
while(i<L.length)printf("%d ",L.base[i++]);
printf("\n");
}
int main()
{
SqList *L,*L1;int i;
InitList(L);InitList(L1);
for(i=2;i<17;i+=2)ListInsert(L,1,i);
ShowList(*L);
DelXElem(L,6);DelXElem(L,16);DelXElem(L,2);
ShowList(*L);
DelIElem(L,1);DelIElem(L,2);
ShowList(*L);
for(i=0;i<10;i++)OrderInsert(L1,i);
OrderInsert(L1,-1);OrderInsert(L1,6);OrderInsert(L1,16);
ShowList(*L1);
RevList(L1);
ShowList(*L1);
RevList1(L1);
ShowList(*L1);
DelList(L);
DelList(L1);
system("PAUSE");
return 0;
}
du51 2005-05-19
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<stdlib.h>
#define LIST_INIT_SIZE 5
#define LIST_INCREAMENT 2
typedef int Status;
#define ERROR 0
#define OK 1
#define OVERFLOW 2
struct SqList{
int *base,length,listsize;
};
void InitList(SqList &L)
{
L.base=(int *)malloc(sizeof(int)*LIST_INIT_SIZE);
if(!L.base)exit(OVERFLOW);
L.length=0;
L.listsize=LIST_INIT_SIZE;
}
Status ListInsert(SqList &L,int i,int e)
{
int *p,*q;
if(i<1||i>L.length+1)return ERROR;
if(L.length>=L.listsize)
{
L.listsize+=LIST_INCREAMENT;
if(!(L.base=(int *)realloc(L.base,L.listsize*sizeof(int))))
exit(OVERFLOW);
}
if(!L.length){L.base[L.length++]=e;return OK;}
for(p=L.base+L.length-1,q=L.base+i-1;p>=q;p--)*(p+1)=*p;
*q=e;L.length++;
return OK;
}
Status OrderInsert(SqList &L,int e)
{
int *p=L.base,i=0;
if(!L.length)return ListInsert(L,1,e);
while(i<L.length)
{
p=L.base+i;
if(*p>e)break;
i++;
}
return ListInsert(L,i+1,e);
}
Status DelIElem(SqList &L,int i)
{
if(i<1||i>L.length)return ERROR;
for(int j=i+1;j<=L.length;j++)L.base[j-2]=L.base[j-1];
L.length--;
return OK;
}
Status DelXElem(SqList &L,int x)
{
int i=0;
while(i<L.length)if(L.base[i++]==x)break;
return DelIElem(L,i);
}
Status RevList(SqList &L)
{
int i,temp;
if(!L.base)return ERROR;
for(i=0;i<L.length-1-i;i++)
{
temp=L.base[i];
L.base[i]=L.base[L.length-1-i];
L.base[L.length-1-i]=temp;
}
return OK;
}
void DelList(SqList &L)
{
if(L.base)free(L.base);
L.base=0;
L.length=L.listsize=0;
}
Status RevList1(SqList &L)
{
SqList L1,*p=&L;int i;
InitList(L1);
if(!L.base)return ERROR;
for(i=0;i<L.length;i++)ListInsert(L1,1,L.base[i]);
DelList(L);
L=L1;
return OK;
}
void ShowList(SqList L)
{
int i=0;
while(i<L.length)printf("%d ",L.base[i++]);
printf("\n");
}
int main()
{
SqList L,L1;int i;
InitList(L);InitList(L1);
for(i=2;i<17;i+=2)ListInsert(L,1,i);
ShowList(L);
DelXElem(L,6);DelXElem(L,16);DelXElem(L,2);
ShowList(L);
DelIElem(L,1);DelIElem(L,2);
ShowList(L);
for(i=0;i<10;i++)OrderInsert(L1,i);
OrderInsert(L1,-1);OrderInsert(L1,6);OrderInsert(L1,16);
ShowList(L1);
RevList(L1);
ShowList(L1);
RevList1(L1);
ShowList(L1);
DelList(L);
DelList(L1);
system("PAUSE");
return 0;
}
du51 2005-05-19
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<stdlib.h>
/*结点结构*/
typedef struct sNode{
int data;
struct sNode *next;
}Node;
/*链表初始化,因为C中无引用传参,故用指针*/
void InitList(Node *&head)
{
head=NULL;
}
/*链表的插入函数*/
void InsertList(Node *&head,int item)
{
Node *q=head,*p=head;
Node *newnode=(Node *)malloc(sizeof(Node));
if(!newnode){printf("allocate memory error!\n");return;}
newnode->data=item;newnode->next=NULL;
if(!head)head=newnode;
else if(head->data>newnode->data)
{
newnode->next=head;
head=newnode;
}
else
{
while(q&&q->data<newnode->data){p=q;q=q->next;}
if(!q)p->next=newnode;
else {p->next=newnode;newnode->next=q;}
}
}
void DeleteI(Node *&head,int i) //从1开始
{
int n=0;Node *p=head,*q=head;
if(i<1||!head){printf("ERROR!\n");return;}
else if(i==1){p=head->next;free(head);head=p;}
else
{
while(q&&n<i-1){n++;p=q;q=q->next;}
if(!q){printf("ERROR!\n");return;}
else {p->next=q->next;free(q);}
}
}
void DeleteX(Node *&head,int X) //从1开始
{
Node *p=head,*q=head;
if(!head){printf("ERROR!\n");return;}
else if(head->data==X){p=head->next;free(head);head=p;}
else
{
while(q&&q->data-X){p=q;q=q->next;}
if(!q){printf("ERROR!\n");return;}
else {p->next=q->next;free(q);}
}
}
void InsertFirst(Node *&head,int x)
{

Node *newnode=(Node *)malloc(sizeof(Node));
if(!newnode){printf("allocate memory error!\n");return;}
newnode->data=x;newnode->next=NULL;
if(!head)head=newnode;
else{
newnode->next=head;
head=newnode;
}
}
void OutputList(Node *head)
{
Node *p=head;
if(head)
{
while(p){printf("%d",p->data);p=p->next;}
printf("\n");
}
}
void DestroyList(Node *&head)
{
Node *p=head;
while(head){p=head->next;free(head);head=p;}
}
void ReverseList(Node *&head)
{
Node *p=head,*head1;
InitList(head1);
while(p){InsertFirst(head1,p->data);p=p->next;}
DestroyList(head);
head=head1;
}
int main()
{
Node *head;int i=0;
InitList(head);
printf("INPUT YOUR DATA!\n");
while(1){scanf("%d",&i);if(i==-1)break;InsertList(head,i);}
OutputList(head);i=0;
while(i++<3){DeleteI(head,i);OutputList(head);}
DeleteX(head,3);OutputList(head);
DeleteX(head,5);OutputList(head);
DeleteX(head,9);OutputList(head);
ReverseList(head);
OutputList(head);
DestroyList(head);
system("PAUSE");
return 0;
}
mostideal 2005-05-19
  • 打赏
  • 举报
回复
ding
litawx 2005-05-18
  • 打赏
  • 举报
回复
愿意帮忙的多谢了!

不愿意帮的不好说风凉话了谢谢!
c_nestor 2005-05-18
  • 打赏
  • 举报
回复
...

既无聊,又没好处的事情都有人抢着做...

就当熟悉熟悉语法啊。
litawx 2005-05-18
  • 打赏
  • 举报
回复
回复人: du51(郁郁思扬)

写的是什么?没看懂!

那位兄弟帮忙吧1楼的修改哈

只要能实现题目的几个功能就可以了!

帮小mm做的,多谢了!
yesiloveyou 2005-05-18
  • 打赏
  • 举报
回复
回复人: nicknide(封月翔天) ( ) 信誉:100
说的没错

作业要自己做啊///这样是进步不了的/
litawx 2005-05-18
  • 打赏
  • 举报
回复
感谢楼上的两位了!

太谢谢了!
nicknide 2005-05-18
  • 打赏
  • 举报
回复
...

既无聊,又没好处的事情都有人抢着做...
du51 2005-05-18
  • 打赏
  • 举报
回复
#include<iostream>
using namespace std;
const int MAXLISTSIZE=100;
template <class DataType>
class SeqList
{
DataType data[MAXLISTSIZE];
int size;
public:
SeqList();
~SeqList();
int GetSize()const;
bool IsEmpty()const;
int FindElement(DataType &item)const;
DataType GetData(int pos)const;
void InsertItem(const DataType &item,int pos);
DataType DeleteItem(int pos);
void ClearSeq();
void ShowSeq()const;
};
template <class DataType>
SeqList<DataType>::SeqList(){size=0;}
template <class DataType>
SeqList<DataType>::~SeqList(){}
template <class DataType>
int SeqList<DataType>::GetSize()const
{
return size;
}
template <class DataType>
bool SeqList<DataType>::IsEmpty()const
{
return size?false:true;
}
template <class DataType>
int SeqList<DataType>::FindElement(DataType &item)const
{
if(size)
{
for(int i=0;i<size;i++)
{
if(data==item)return i;
}
}
return -1;
}
template <class DataType>
DataType SeqList<DataType>::GetData(int pos)const
{
if(pos<0││pos>size-1)exit(1);
else return data[pos];
}
template <class DataType>
void SeqList<DataType>::InsertItem(const DataType &item,int pos)
{
if(size==MAXLISTSIZE){cout<<"操作失败,空间已满!"<<endl;return;}
if(pos<0││pos>size){cout<<"操作失败,下标不对!"<<endl;return;}
for(int i=size;i>pos;i--)data=data[i-1];
data[pos]=item;
size++;
return ;
}
template <class DataType>
DataType SeqList<DataType>::DeleteItem(int pos)
{
if(!size){cout<<"操作失败,空间已空!"<<endl;exit(1);}
if(pos<0││pos>size-1){cout<<"操作失败,下标不对!"<<endl;exit(1);}
DataType temp=data[pos];
for(int i=pos;i<size-1;i++)data=data[i+1];
size--;
return temp;
}
template <class DataType>
void SeqList<DataType>::ClearSeq()
{
size=0;
}
template <class DataType>
void SeqList<DataType>::ShowSeq()const
{
for(int i=0;i<size;i++)
cout<<data;
cout<<endl;
}
int main()
{
int i;
SeqList<int> sl;
for(i=0;i<6;i++)sl.InsertItem(i+1,i);
for(i=0;i<6;i++)cout<<sl.GetData(i);
cout<<endl;
sl.ShowSeq();
for(i=0;i<6;i++)cout<<sl.DeleteItem(0);
cout<<endl;
cout<<sl.IsEmpty()<<endl;
sl.ShowSeq();
system("PAUSE");
return 0;
}
#include<iostream>
using namespace std;
const int MAXLISTSIZE=100;
template <class DataType>
class SeqList
{
DataType data[MAXLISTSIZE];
int size;
public:
SeqList();
~SeqList();
int GetSize()const;
bool IsEmpty()const;
int FindElement(DataType &item)const;
DataType GetData(int pos)const;
void InsertItem(const DataType &item,int pos);
DataType DeleteItem(int pos);
void ClearSeq();
void ShowSeq()const;
};
template <class DataType>
SeqList<DataType>::SeqList(){size=0;}
template <class DataType>
SeqList<DataType>::~SeqList(){}
template <class DataType>
int SeqList<DataType>::GetSize()const
{
return size;
}
template <class DataType>
bool SeqList<DataType>::IsEmpty()const
{
return size?false:true;
}
template <class DataType>
int SeqList<DataType>::FindElement(DataType &item)const
{
if(size)
{
for(int i=0;i<size;i++)
{
if(data==item)return i;
}
}
return -1;
}
template <class DataType>
DataType SeqList<DataType>::GetData(int pos)const
{
if(pos<0││pos>size-1)exit(1);
else return data[pos];
}
template <class DataType>
void SeqList<DataType>::InsertItem(const DataType &item,int pos)
{
if(size==MAXLISTSIZE){cout<<"操作失败,空间已满!"<<endl;return;}
if(pos<0││pos>size){cout<<"操作失败,下标不对!"<<endl;return;}
for(int i=size;i>pos;i--)data=data[i-1];
data[pos]=item;
size++;
return ;
}
template <class DataType>
DataType SeqList<DataType>::DeleteItem(int pos)
{
if(!size){cout<<"操作失败,空间已空!"<<endl;exit(1);}
if(pos<0││pos>size-1){cout<<"操作失败,下标不对!"<<endl;exit(1);}
DataType temp=data[pos];
for(int i=pos;i<size-1;i++)data=data[i+1];
size--;
return temp;
}
template <class DataType>
void SeqList<DataType>::ClearSeq()
{
size=0;
}
template <class DataType>
void SeqList<DataType>::ShowSeq()const
{
for(int i=0;i<size;i++)
cout<<data;
cout<<endl;
}
int main()
{
int i;
SeqList<int> sl;
for(i=0;i<6;i++)sl.InsertItem(i+1,i);
for(i=0;i<6;i++)cout<<sl.GetData(i);
cout<<endl;
sl.ShowSeq();
for(i=0;i<6;i++)cout<<sl.DeleteItem(0);
cout<<endl;
cout<<sl.IsEmpty()<<endl;
sl.ShowSeq();
system("PAUSE");
return 0;
}
llf_hust 2005-05-18
  • 打赏
  • 举报
回复

#include<stdio.h>
#include<stdlib.h>
typedef struct Node{
int data;
struct Node *next;
}*Node;

void Create(struct Node **head)
{
int a;
struct Node *tail, *p;
printf("please input data end of 0.\n");
scanf("%d",&a);
p = (struct Node *) malloc (sizeof(struct Node));
p->data = a;
p->next = *head;
*head = p;
tail = p;
scanf("%d", &a);
while(a)
{

p = (struct Node *) malloc (sizeof(struct Node));
p->data = a;
p->next = NULL;
tail->next = p;
tail = p;
scanf("%d",&a);
}
}

int Length(Node p)
{
int len = 0;
while ( p != NULL)
{
len++;
p = p->next;
}
return len;
}

void Display(Node p)
{
while(p != NULL )
{
printf(" %d",p->data);
p = p->next;
}
printf("\n");
}

struct Node *Fun(struct Node *a, struct Node *b)
{
int len1 = 0, len2 = 0;
struct Node *p,*p1= NULL,*p2;
len1 = Length(a);
len2 = Length(b);
if ( len1 != len2)
{
printf("Error\n");
return NULL;
}
else
{
p = (struct Node *) malloc(sizeof(struct Node));
p->data = a->data ^ b->data;
p->next = p1;
p1 = p;
p2 = p;
a = a->next;
b = b->next;
while ( a != NULL && b != NULL)
{
p = (struct Node *) malloc (sizeof(struct Node));
p->data = a->data ^ b->data;
p->next = NULL;
p2->next = p;
p2 = p;
a = a->next;
b = b->next;
}
}
return p1;
}

void Del(struct Node **p)
{
struct Node *a;
while(*p)
{
a = (*p)->next;
free(*p);
*p = a;
}
}

main()
{
int a;
struct Node *p = NULL ,*p1 = NULL, *p2;
clrscr();
Create(&p);
Create(&p1);
p2 = Fun(p,p1);
Display(p2);
Del(&p);
Del(&p1);
Del(&p2);
printf("\n");
system("pause");
}




/* 给你一个链表的程序参考一下, 兄弟要记得自己动手写呀这样才会提高 */

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧