| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 644 人关注过本帖
标题:数据结构与C语言
只看楼主 加入收藏
cwj3838
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2007-6-17
收藏
 问题点数:0 回复次数:2 
数据结构与C语言
1..使用头插法,生成一升序链表
2..在该升序链表,要求插入一元素,使得链表仍有序...
这个题目用C语言怎么写啊...
搜索更多相关主题的帖子: 数据结构 C语言 
2007-06-17 21:35
yixiliuyun
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2007-6-16
收藏
得分:0 

哎 不想写了 给你看看我刚刚写了的对《树〉操作 和你要的一样 呵呵
希望对你有帮助 (我想应该和你要得差不多了)

//二叉选择树 增加 删除
#include <iostream>

using namespace std;

//建立结构
typedef struct BSTree
{
int x; //值
struct BSTree *Lnext , *Rnext;//左指针,右指针
};

//查找节点 ,如果节点不存在 则插入 递归查找左右节点
BSTree *SearchBST(BSTree *T , BSTree *f , BSTree *k)//查找放节点的位置
{
if(T == NULL) return f;
else if(k->x == T->x) {cout << "重复插入\n" ; return NULL;}
else if(k->x < T->x) return(SearchBST(T->Lnext , T , k));
else return(SearchBST(T->Rnext , T , k));
}//SearchBST

BSTree *Creat()//建立二叉排序树
{
BSTree *T , *k , *p = NULL;
int n;
cout << "输入要输入的个数:";
cin >> n;
T = (BSTree *)malloc(sizeof(BSTree));//头节点
if(n <= 0) { T = NULL; } //输入为0时 头节点为空
else
{
T->Lnext = NULL;
T->Rnext = NULL;
cin >> (T->x);//输入头节点的值
while(--n){
k = (BSTree *)malloc(sizeof(BSTree));//建立新节点
cin >> (k->x);
k->Lnext = NULL;
k->Rnext = NULL;
p = SearchBST(T , T , k); //插入新节点
if(p != NULL)
{
if(p->x > k->x)
p->Lnext = k;//连接
else p->Rnext = k;
}
}
}
return T;//返回根结点
}//Creat

void Add(BSTree *T)//增加节点
{
BSTree *k , *p;
cout << "\n输入你要添加的数据:";
k = (BSTree *)malloc(sizeof(BSTree));//建立新节点
cin >> (k->x);
k->Lnext = NULL;
k->Rnext = NULL;
p = SearchBST(T , T , k); //插入新节点
if(p != NULL)//和建立是一样子的过程
{
if(p->x > k->x)
p->Lnext = k;//连接
else p->Rnext = k;
}
}


bool Del(BSTree *p , BSTree *f)//删除节点
{
BSTree *q , *s ;
if(!p->Rnext){//右子树空 接左子树
q = p;
if(f->Lnext == p)
f->Lnext = p->Lnext;
else
f->Rnext = p->Rnext;
delete q;
}
else if(!p->Lnext){//左子树空 接右子树
q = p ;
if(f->Rnext == p)
f->Rnext = p->Rnext;
else
f->Lnext = p->Rnext;
delete q;
}
else {//左右都不为空
q = p ; s = p->Lnext ;
while(s->Rnext) {q = s ; s = s->Rnext;}//左转 到右的尽头
p->x = s->x;//以s代替p的值
if(q != p) q->Rnext = s->Lnext;//重接q的右子树
else q->Lnext = s->Lnext;//重接q的左子树
delete s;
}
return 1;
}//Del

bool DelBST(BSTree *T , BSTree *f , int x)//查找被删除的节点
{
if(!T) return 0;
else{
if(T->x == x) return Del(T , f);//返回节点
else if(T->x > x) return DelBST(T->Lnext , T , x);
else return DelBST(T->Rnext , T , x);
}
}
//中序遍历
void MTraver(BSTree *T)
{
if(T){
MTraver(T->Lnext);
cout << T->x << " " ;//<< T << " ";
MTraver(T->Rnext);
}
}//MTraver

int main()
{
int e , x;
BSTree *TH;//头节点
TH = Creat();//建立二叉树
cout << endl;
MTraver(TH);//中序遍历
cout << endl;
Add(TH);//增加节点
cout << endl;
MTraver(TH);//中序遍历
cout << endl;
cout << "输入要删除的数:";
cin >> x;
cout << endl;
e = DelBST(TH , TH , x);//删除
cout << endl;
if(e == 0) cout << "没有此数\n";
else
MTraver(TH);
cout << endl;
system("pause");
return 0;
}


我的qq算法群 供大家讨论哦 请各位喜欢算法的朋友加入哦 qq群号 40320457 嘿嘿
2007-06-19 11:47
cwj3838
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2007-6-17
收藏
得分:0 

这是C++的啊 我们都没教 可以用C的吗????

2007-06-19 14:35
快速回复:数据结构与C语言
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016183 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved