关于数据结构(C语言)的几道题~在线等

1.怎样在递增有序线性表L={12.13.21.24.28.30.42}中插入数据元素26的程序。
2.编写在带头节点的单链表中删除(一个)最小值结点的(高效)算法
3.设有一个带头点的单向链表L={12.13.21.24.28.30.42},数据项递增有序,写一个算法,重新排列链表,使数据递减有序.

忘那位高手指点一下以上3道题的思路,小弟感谢不尽!在线等
忘详细点!我是新手

我把这三个小题合到一起写了
关于算法看一下每个函数
简单的
第一题我是先把26插到链表最后
再用一个”正序排列”函数,排列一下
数据递减有序用的是”逆序函数”(其实就是正序里面把>号改成<号就好了,

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
typedef int ElemType;

typedef struct LNode {
ElemType date;
struct LNode *next;
}linklist,*link;

////////////////////////////////////////////// /////////
// /*插入结点*/////////////// ///////////////////////
int listinsert(link &L,int i,ElemType e)
{
link p,q;int j;
p=L;j=0;
while(p&&j<i-1)
{p=p->next;++j;
}q= (link)malloc(sizeof(LNode));
q->date=e;
q->next=p->next;
p->next=q;
return 1;
} ///////////////////////////////////
/////////////////////////////////////
void show(link l)
{ link p; int j;
p=l;j=0;
cout<<"链表的值为:\n";
while(p->next)
{cout<<p->next->date<<endl;
p=p->next;
}} ///////////////////////////////////////
////正序排列/////////////////////////////////////////
void putline(link &l)
{if(l==NULL ||l->next==NULL )
cout<<"链表未建立或是空的,请先构造链表\n" ;
else{
link p,q;
p=l->next;
while(p!=NULL)
{ q=p->next;
while(q!=NULL)
{ if(p->date>q->date)
{ ElemType t;
t=p->date;
p->date=q->date;
q->date=t;
} q=q->next;
}
p=p->next;
}}}
///////////////////////////////////////////////
///////////// 逆序排列/ ///////////////
void fputline(link &l)
{
if(l==NULL ||l->next==NULL )
cout<<"链表未建立或是空的,请先构造链表\n" ;
else{
link p,q;
p=l->next;
while(p!=NULL)
{ q=p->next;
while(q!=NULL)
{ if(p->date<q->date)
{ ElemType t;
t=p->date;
p->date=q->date;
q->date=t;
} q=q->next;
} p=p->next;
}}}

//////////////////////////////////////////////////////////////
int listdelete(link &L,int i,ElemType &e)
{
link p,q; int j;
p=L;j=0;
while(p->next&&j<i-1)
{
p=p->next;++j;
} q=p->next;
p->next=q->next;
e=q->date;free(q);
cout<<"结点已经删除\n";
return 1;
}
//////////////////////////////////////////////////////////
main()
{int i=1,j;
link L=NULL;int a[7]={12,13,21,24,28,30,42 };
if(L)delete L;
L= (link)malloc(sizeof(LNode)) ;
if (!L) exit(1);
L->next=NULL;
cout<<"链表已经建立\n";
for(;i<=7;i++)
listinsert(L,i,a[i-1]) ;
show(L);
cout<<"--------------------\n";
while(1)
{ cout<<"输入1插入数据\n"<<"输入2删除最小节点\n"<<"输入3递减排序\n";
int yy;
cin>>yy;
switch(yy)
{
case 1:
cout<<"--------------------\n输入要插入的值\n";
cin>>j;
listinsert(L,i,j) ;
putline(L);
show(L);
cout<<"--------------------\n ";
break;
case 2: int e;
putline(L);
listdelete(L,1,e);
show(L);
cout<<"--------------------\n ";
break;
case 3: fputline(L);
show(L); break;
default: break;
}} }
温馨提示:内容为网友见解,仅供参考
第1个回答  2007-11-02
(只是思路,语法不严格)
1.插入排序
int m,i,data=26,len=8;
for(i=0;i<=len-1;i++){
if(data>L[i])
break;
}
for(m=len;m>i+1;m--)
L[m]=L[m-1];
L[i+1]=data;
2.
p=head;
int i,min_data;
Node *near_p;
min_data=p->data;
for(i=1;i<=len;i++)
if(min_data>p->next->data){
min_data=p->next->data;
near_p=p;//near_p为最小值结点的前趋结点地址
}
//最后,near_p为最小值结点的前趋结点的地址
near_p->next=near_p->next->next;
delete near_p->next;
3.暂时只想出一种办法:
遍历链表,在遍历过程中,将每个结点的next值保存到一个指针数组中,然后再将每个结点的next值赋值为指针数组倒序的值,原第二结点next值为head,最后将head指向原最后一个结点,本回答被提问者采纳

数据结构(C语言版),求高手解决。。
1.二叉树是度为2的有序树( )【答案】× 2.完全二叉树一定存在度为1的结点( )【答案】× 3.深度为K的二叉树中结点总数≤2k-1( )【答案】√ 4.由一棵二叉树的先序序列和后序序列可以惟一确定它( )【答案】× 5.完全二叉树中,若一个结点没有左孩子,则它必是树叶...

关于数据结构(C语言)的几个题
随意画几个二叉树就知道了,这里空链域用ε表示,数一数结点个数与ε个数就知道是n+1了 2.具体过程在图中给出。3.第一步将数据(假设为e)放入s的data中;第二步s的后继指向q的后继节点;第三步q的后继指向s 4.查找72只需2步:第一步:设立low、high与mid指针,将72与mid指向的值即48...

数据结构c语言版一道题求解
include <stdio.h>#include <stdlib.h>typedef int DataType; struct SeqList{ int MAXNUM; \/* 顺序表中最大元素的个数*\/ int n; \/* 存放线性表中元素的个数n≤MAXNUM *\/ DataType *element; \/* element[0],element[1],…,element[n - 1]存放线性表中的元素 ...

关于数据结构的问题,用C语言描述
一、数据结构的章节结构及重点构成数据结构学科的章节划分基本上为:概论,线性表,栈和队列,串,多维数组和广义表,树和二叉树,图,查找,内排,外排,文件,动态存储分配。对于绝大多数的学校而言,“外排,文件,动态存储分配”三章基本上是不考的,在大多数高校的计算机本科教学过程中,这三章也是基本上不作讲授的。所以,...

一份C语言的数据结构题目,急求答案
第一题;Search (BiTree t,ElemType x){ struct nodee;{BiTree pp;int tag;}s[100];int top; Bitree p;top=0; p=t;while(p!=NULL&&p->p!=NULL){while(p!=NULL&&p->data!=x){top++;s[top].pp=p;s[top].tag=0;p=p->lchild;} if(p!=NULL&&p->data==x){for(i=1...

数据结构的几道题
第一题:C 数据的逻辑结构分为:线性结构和非线性结构 数据的存储结构分为:顺序存储结构和链式存储结构 第二题:B 第四题:C我个人可以利用二路归并的排序方法,利用特殊情况L1(low1,high1),L2(low2,high2),且low2>hign1。第七题:A 若A是一个m*n的二维数组,数组下标从零开始,以列为主...

数据结构c语言
1.数据结构是一门研究非数值计算的程序设计问题中计算机的 C 以及它们之间的 _ B 和运算等的学科。① A. 数据元素 B. 计算方法 C. 逻辑存储 D. 数据映象 ② A. 结构 B. 关系 C. 运算 D. 算法 2.数据结构被形式地定义为(K,R),其中K是 B 的有限集,R...

数据结构(C#语言版)笔试试题与答案
一、 选择题(每小题2分,共24分)1.计算机识别、存储和加工处理的对象被统称为( A )A.数据 B.数据元素 C.数据结构 D.数据类型 2.栈和队列都是( A )A.限制存取位置的线性结构 B.顺序存储的线性结构 C.链式存储的线性结构 D.限制存取位置的非线性结构 3.链栈与...

有关数据结构(C语言)的判断题?
1.错.链式存储逻辑上相邻的结点物理上不必相邻,逻辑上的前后顺序实际由指针实现.2.错.链式存储和顺序存储各有优点,适用的情况不同 3.正确.4.正确.5.正确.6.错.深度是指组成该树各结点的最大层次.7.错.叶子节点就没有子树,也可能有的节点有且只有一棵子树.8.正确.9.正确.10.正确....

数据结构(c语言版)题目求答案
Q->next->next=p->next;free(p);rturn OK;}\/\/DeCiqueue 3.31 int Palindrome_Test(){ InitStack(S);InitQueue(Q);while((c=getchar())!='@'){ Push(S,c);EnQueue(Q,c);} while(!StackEmpty(S)){ pop(S,a);DeQueue(Q,b);if(a!=b)return ERROR;} return OK;} ...

相似回答