关于数据结构(C语言版)的问题

1、已知一个顺序表L,其中的元素递增有序排列,设计一个算法插入一个元素x后保持该顺序表仍递增有序排列。
2、设计一个算法删除单链表L中值为x的结点的直接前驱结点。

只有十分了。。谢谢了

第一题:下面的L.listsize是顺序表在建立的时候分配的总体存储量,INCREMENT是新增加的量,都是实现已经定义好的,EType是元素的类型,到具体的程序中的时候,可以使用typedef定义类型,这里是代指某个类型;具体算法如下:
void inser_order(List &L,EType Elem)
{if(L.length>=L.listsize) //当新增加元素时,表的总体长度大于已经分配的总体大小时,要重新分配表的长度;
{list *newbase;
newbase=(EType *)realloc(L.elem,(L.listsize+INCREMENT)*sizeof(EType));//新分配的表长
if(!newbase) exit(OVERFLOW);//分配不成功;
L.elem=newbase;L.size+=INCREMENT;
}
List *p,*q;
int i=L.length-1;
q=&(L.elem[i]);
while(i>=0)//从表的最后的元素开始比较,寻找合适的插入位置;
{
if(Elem<=L.elem[i]&&Elem>L.elem[i-1]) //插入的数值位于当前值与前面值的中间值时
{
p=&(L.elem[i]);//指向要插入的位置
break;
}
{
if(i==L.length-1) //当插入的值是比最大元素还要大时
{
p=q;//指向最后的位置
break;
}
}
i--;
}
while(q>=p)//从后往前移动各个位置的数,然后找到要插入的位置,插入
{
*(q+1)=*q;
q=q-1;
if(q==p)//找到要插入的位置
{
*(q+1)=*q;
*q=e;//插入元素
++L.length;//表长加1
}
}
}
第二题:
void deletenode(Listnode &L,EType X)
{Listnode *p,*q,*r;//p用来寻找X结点,q用来指向X结点的前驱结点的前驱结点,r指向p所指向结点的前驱结点;
p=L;//初始时,指向头结点;
q=L;
if(p->elem==X)//第一个结点就是所找的X;
{
printf("The first node is X,can't delete its precessor");
exit(1);
}
while(p->next!=NULL)//遍历链表,寻找X的位置
{
if(p->elem==X)//找到X
{
while(q->next!=r)
q=q->next;//寻找X的前驱结点
//删除结点的操作
q->next=p;
r->next=NULL;
free(r);
}
r=p; //r永远指向p所指向结点的前驱结点
p=p->next;//p往后移动
}
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-10-06
顺序表和链表都带头结点

(1)
void SeqListInsert(SeqList *L, int num)
{
int i, j = 1;

if (MAXSIZE-1 == L->length)
{
printf("表已满,无法进行插入\n");
return;
}

while (j <= L->length)
{
if (num < data[j])
{
break;
}
else
{
j++;
}
}

L->length++;

for (i=L->length; i>j; i--)
{
data[i] = data[i-1];
}

data[j] = num;
}

(2)
void LinkDelete(LinkNode *head, int num)
{
LinkNode *p = head->next;
LinkNode *q = head;

if (num == p->data)
{
printf("此为第一个结点,无前驱\n");
return;
}

while (NULL != p)
{
if (num == p->next->data)
{
q->next = p->next;
free(p);
return;
}
else
{
p = p->next;
q = q->next;
}
}
}本回答被提问者采纳
第2个回答  2011-10-06
表指针问题的确是个难点,我当时学时也很头疼。。。
第3个回答  2011-10-06
路过……(*^__^*)追问

诶诶 你刚才有帮我回答么

追答

本人不答题的……

第4个回答  2011-10-06
要写代码?追问

恩。

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

...数据结构(学校教材是c语言版)学的也不好,下一步该怎么
覆盖了C语言的全部知识,同时通过实践项目增强理解。此外,杜克大学的《Introductory C Programming》也是不错的选择。书籍方面,推荐《大话数据结构》这本书,其内容接地气,配有大量图示和代码案例,助你轻松理解。

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

关于数据结构的问题,用C语言描述
这个问题也具有非常实用的背景特色,一个典型的应该就是旅游景点及旅游路线的选择问题。解决第一个问题用DIJSKTRA算法,解决第二个问题用FLOYD算法。注意区分。第七章 查找在不少数据结构的教材中,是把查找与排序放入高级数据结构中的。应该说,查找和排序两章是前面我们所学的知识的综合运用,用到了树、也用到了链表等...

C语言版的数据结构问题:数据结构和数据类型的关系?
数据结构 用 struct 定义 比如: struct A {int a, char b, A *p} *pA;那么A属于一个数据结构,a,b,p都属于数据元素。A的初始大小是四个字节,既元素最大的一个的空间。。。里面的成员同时存在,各自有各自的地址,互不干扰。既pA->a,pA->b,pA->p是可以同时存在滴。数据类型 用...

关于数据结构(C语言)的几个题
最多比较次数参考严蔚敏《数据结构》第九章 查找 220页。5.例如图中这棵树,假设i=2,2i=4不大于n,2i+1=5大于n,所以2这个结点没有右子树。6.顺序栈的类型定义:typedef struct{ char *base; \/\/也可用ElemType,只要定义了就行 char *top; int stacksize;}SqStackTp; \/\/...

数据结构的习题(C语言版)
第一个问题,分析下要求,可以知道要做的事情是合并两个数组到一个数组里去,数组C的长度是AB之和。表C的第一个字符不是A的第一个字符就是B的第一个字符。因此接下来要做的事情就是做一个长度为AB之和的循环,每一次找出A或B中的最小元素,存到C里面去,循环结束,C就自动有了。第二个问题...

数据结构(c语言版)求助,我想了好久都没想出来?
内外层循环关系示意图 其中①是最外层循环,②是中间层循环,④是最内层循环,各语句的执行顺序是:先从最外层循环开始①、 ②、 ③各执行一次,到最内层④后,④连续执行(n+1)次,其内部语句⑤连续执行 n 次 ,然后返回至中间层 ②执行下一次,②每执行一次,③就执行一次,④连续执行(n+1)...

数据结构(C语言版)题:由一个栈的输入序列12345,设计算法,分别输出54321...
54321:1~5这5个数连续进栈后再5个数连续出栈,用2个循环就可以了 32145:1~3这3个数连续进栈后再3个数连续出栈,也可以用2个循环,然后是4进4出,5进5出

C语言数据结构的一个基本问题
1 int read_2D_Array(int **array, int i, int j, int column)2 { \/\/i row j column ,总行数为column 3 return((*(int*)array + i*column + j));4 } 以上函数的参数第一行的int **array是函数参数这个参数说明该函数参数列表一接收的数据类型为int ** 型的变量 ...

相似回答