在链表中typedef int statusstruct node {int data; struct node *n...

当前位置: >
> 链表合并(菜鸟求救)已有a、b两个链表,每个链表中的结点包括学号、成绩。要求把两个链表合并,按学号
链表合并(菜鸟求救)已有a、b两个链表,每个链表中的结点包括学号、成绩。要求把两个链表合并,按学号
lhcdiablo & at
链表合并(菜鸟求救)已有a、b两个链表,每个链表中的结点包括学号、成绩。要求把两个链表合并,按学号升序排列。关于写的合并的那个函数 感觉很稀烂
不知道能不能简化一下& 基本思路就是:若链表a是有序的
将b中的数于a中的数一一比较了 分了三种情况:1.链表b的数小于a的第一个结点
2.遍历a后 链表b的数 比所有的数都大 3.b中数插入a中间不知道这样对么。有什么好的方法 求高手指点 本人刚学习链表这一块 谢谢 了& struct student *sort(struct student *heada,struct student *headb){&
struct student *pa1,*pa2,*pb1,*pb2; &
pa1=pa2= &
pb1=pb2= &
while (pa2-&next!=NULL&&pb2-&next!=NULL)
// 遍历链表a &
if (pb1-&num&pa1-&num)
//小于第一个结点num &
pb2-&next= &
headb= //将头指针a赋给头指针b
pb2-&next=pa2-& &
if (pb1-&num&pa1-&num)
pb2-&next=pb1; &
pa2-&next=
if (pb1-&num&pa2-&num&&pb1-&num&pa1-&num)
pa2-&next=pb2;
pb2-&next=pa1;
pb1=headb=pb2;
  C/C++ code  #include &iostream&
#include &stdlib.h&
typedef struct Node
struct Node *
typedef struct Node *
void creat(linklist *L,int n)//去掉你的void *
linklist r,p;
*L=r=(linklist)malloc(sizeof(node));
//不要的变量都删除掉 data
for(i=0;i&n;i++)
p=(node *)malloc(sizeof(node));
cout$<<$please input one number:&$$p-&
r-&next=p;
cout$<<$the linklist is full&$<$
r-&next=NULL;
void visit(linklist L)
linklist p=L-&
cout$<<$linklist's data: \n&;
cout$<$p-&data$<<$ &;
void mergelinklist(linklist &L1,linklist &L2,linklist &L3)
linklist p1,p2,p3;
p1=L1-& //修改处
p2=L2-& //
while(p3-&next )
p3=p3-& //遍历到末尾;
linklist temp=(node *)malloc(sizeof(node));
temp-&data=p2-&
temp-&next=NULL;//插入节点
p3-&next=//
/*排序好了*/
linklist p11,p33;
for(p33=L3-&p33 != NULL; p33=p33-&next)
for(p11=p33-&p11 != NULL;p11=p11-&next)
if(p33-&data & p11-&data)
temp=p11-&
p11-&data=p33-&
p33-&data=
int main()
linklist L1,L2,L3;
creat(&L1,3);
creat(&L2,3);
visit(L1);
visit(L2);
cout$<<$合并后: \n&;
mergelinklist(L1,L2,L3);
visit(L3);
shizhi8201 & &
& & (0)(0)  C/C++ code  #include &stdio.h&
#include &stdlib.h&
#include &malloc.h&
//#define NULL 0 没有必要
struct student
struct student *
//下一结点
struct student *creat(void)
struct student *p1,*p2,*
p1 = p2 = (struct student *)malloc(sizeof(struct student)); //创建头结点
head= NULL;
printf(&\n请输入学号与分数,以0结束输入!\n&);//最好要有输入提示
scanf(&%d,%d&,&p1-&num,&p1-&score);
while (p1-&num!=0)
//输入0 结束
if(n==1) //判断头结点
p2-&next=p1;
//保存前驱结点
p1=(struct student *)malloc(sizeof(struct student)); //开辟新的结点
scanf(&%d,%d&,&p1-&num,&p1-&score);
p2-&next=NULL;
struct student *insert(struct student *head,struct student *pi)
//插入结点
struct student *pf,*
if(head==NULL)
//空链表 插入
head-&next=NULL;
while((pb-&next!=NULL)&&(pb-&num&pi-&num))
//比较大小
按顺序插入
if(pb-&num&=pi-&num)
//找到了所要插入的位置
(从小到大)
if(pb==head)
//插入到 链表 的 头
//插入到普通位置
//插入到链表的 尾
pi-&next=NULL;
struct student *sort(struct student *heada,struct student *headb)// 若链表a是有序的 插入排序
struct student *pb,*pb1;
pb = pb1 =
if((heada == NULL)&&(headb != NULL))
else if((headb == NULL)&&(heada != NULL))
while(pb1!= NULL)
//控制listb,将listb中的结点依次插入lista中
pb1 = pb1-&
heada=insert(heada,pb);
void print(struct student *head)
struct student *p;
while(p!=NULL)
printf(&%d,%d\n&,p-&num,p-&score);
int main(int argc,char *argv[])
struct student *heada,*headb,*
printf(&input the list a:&);
heada=creat(); //创建链表a
print(heada);
printf(&\ninput the list b:&);
headb=creat(); //创建链表b
print(headb);
printf(&\nthe new list :\n&);
pb = sort(heada,headb); //升序合并链表a和b
print(pb);
}shizhenlei & &
& & (0)(0)
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&&&湘教QS2-164&&增值电信业务经营许可证湘B2-&&&&&&&&&&&&&
#include&stdio.h&
#include&string.h&
#include&stdlib.h&
#define flag 0
typedef int DataT
typedef struct Node
struct Node *
}LNode,*LinkL
LinkList Creat_LinkList()//创建带头结点的链表(从尾部插入)
LinkList L;
LNode *s,*r;
s=(LNode *)malloc(sizeof(LNode));
s-&next=NULL;
scanf("%d",&x);
while(x!=flag)
s=(LNode *)malloc(sizeof(LNode));
s-&data=x;
if(L-&next==NULL)
L-&next=s;
r-&next=s;
scanf("%d",&x);
r-&next=NULL;
LinkList pur_LinkList(LinkList L)//删除重复结点的算法
LNode *p,*q,*r;
while(q-&next)
if(q-&next-&data==p-&data)
q-&next=r-&
int main()
LinkList H;
H=Creat_LinkList();
printf(" %d",p-&data);
printf("\n");
LinkList S;
S=pur_LinkList(H);
printf(" %d",q-&data);
printf("\n");
system("pause");
阅读(...) 评论()数据结构-结构体的声明
一般来说,知道了各种存储结构的结构体,或者各种算法(其实算法是在各种特定的存储结构下实现)所需的结构体,所以我觉得记住或者牢记各种场合,各种情形下所需要的存储结构的结构体,对算法的创建和表达就会轻松和容易许多。
一、顺序存储
& &1、 顺序表
&&&&&&&&#define
MAXSIZE 100
typedef struct
datatype a[MAXSIZE];
}sequence_
2、栈(顺序栈)
&&&&&&&&#define
MAXSIZE 100
typedef struct
datatype a[MAXSIZE];
}sequence_
3、队列(顺序队列,顺序循环队列)
&&&&&&&&#define
MAXSIZE 100
typedef struct
datatype a[MAXSIZE];
&&&&&&&&&&int
}sequence_
&其中循环队列判满条件:(rear+1)%MAXSIZE=front;判空条件:rear=front
二、链式存储
单链表(带头结点的单链表,循环单链表)
typedef struct link_node
struct link_node *
typedef struct dlink_node
struct link_node *llink,*
typedef struct link_node
struct link_node *
4、链式队列
typedef struct link_node
struct link_node *
typedef struct
node *front,*
三、字符串
1、顺序串:模式匹配(朴素的模式匹配算法,KMP算法)
&&&&&&&&#define
MAXSIZE 100
typedef struct
&&&&&&&&{&char
str[MAXSIZE];
typedef struct node
struct node *
typedef linkstrnode *
3、N维数组:行优先存储,列优先存储
(三维数组)
typdef struct
datatype *//数组存储区的首地址指针
int index[3];//存放三维数组各维的长度
int c[3]; //存放三维数组各维的ci值
1、双亲表示法
&&&&&&&&#define
MAXSIZE 100
typedef&//节点值的类型
typedef struct node//结点类型
//结点双亲的下标
typedef struct tree
{& node treelist[MAXSIZE];//存放结点的数组
&&&&&&&&&&
int length,//树中实际所含结点的个数,根节点的位置
&&&&&&&&}//树的类型
2、孩子表示法(指针方式)
&&&&&&&&#define
m 3//树的度数
typedef&//节点值的类型
typedef struct node
struct node *child[m];//指向子女的指针数组
3、孩子表示法(数组方式)
&&&&&&&&#define
m 3//树的度数
#define MAXSIZE 20//存放树结点的数组大小
typedef&//结点值的类型
typedef struct node//结点类型
int child[m];
treenode tree[MAXSIZE];//存储树结点的数组
//根节点的下标
//树中实际所含结点的个数
4、孩子表示法(链式方式)
#define MAXSIZE 50
typedef&//结点值的类型
typedef struct chnode//孩子结点的类型
struct chnode *
typedef struct//树中每个结点的类型
&&&&&&&&&&chpoint
//指向第一个子女结点的指针
typedef struct//树的类型
{ node treelist[MAXSIZE];
int length,//树中实际所含结点的个数,根结点的位置
5、孩子兄弟表示法
typedef&//结点值的类型
typedef struct node//孩子结点的类型
struct node *firstchild,*
6、树的括号表示
7、树的层号表示
五、二叉树
1、完全二叉树
#define MAXSIZE 20
typedef&//结点值的类型
datatype tree[MAXSIZE];
//树中实际所含结点的个数
2、一般二叉树(顺序存储)
#define MAXSIZE 20
typedef&//结点值的类型
typedef struct
int lchild,//存放左,右子女的下标
//存放双亲结点的下标(当需要带双亲指示时声明)
node tree[MAXSIZE];
&&&&&&&&int
n;//树中实际所含结点的个数
&&&&&&&&int
//存放根结点的下标
3、链式存储
typedef&//结点值的类型
typedef struct node
&&&&&&&&&&struct
node&*lchild,*//存放左,右子女的下标
int *//指向双亲结点的指针(当需要带双亲指示时声明)
typedef bintnode *
//指向二叉树根节点的指针
1、邻接矩阵类型定义
#define FINITY 5000//用5000表示无穷大
#define M 20//最大顶点数
typedef&//顶点值的类型
//权值类型
typedef struct
vertextype vex[M];//顶点信息域
edgetype deges[M][M];//邻接矩阵
int n,e;//图中顶点总数,边数
2、邻接表类型定义
#define M 20//最大顶点数
typedef&//顶点信息数据类型
typedef struct node//边表结点
struct node *
typedef struct vnode//头结点类型
//顶点信息
edgenode *//邻接链表 头指针
typedef struct//邻接表类型
vertexnode adjlist[M];//存放头结点的顺序表
int n,e;//顶点数,边数
1、顺序检索,二分法检索(存储有序)
&&&&&&&&#define
MAXSIZE 100
typedef struct
datatype a[MAXSIZE];
2、分块检索
&&&&&&&&#define
MAXSIZE 100
typedef struct
datatype a[MAXSIZE];
typedef struct
//块中最大值
3、二叉排序树
typedef&//结点值的类型
typedef struct node
&&&&&&&&&&struct
node&*lchild,*
typedef bsnode *
4、Huffman树
typedef struct node
&&&&&&&&&&struct
node&*lchild,*rchild,*
typedef hufnode *
&&&&&&&&#define
MAXSIZE 100//文件中记录个数的最大值
typedef&//排序码类型
typedef struct
&&&&&&&&&&int
//还可定义记录中除了排序码外的其他域
typedef struct
recordtype r[MAXSIZE+1];
&&&&&&&&&&int
//待排序文件中记录的个数
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。c语言链表程序补充
c语言链表程序补充
构造N个结点的单链表返回链表头指针,要求链表中各结点顺序//与结点数据输入顺序相反,例如输入1,2,3,4,5,形成的链表为//head-&5 4 3 2 1 ,补充程序#define N 10typedef struct Node{&&struct Node*}NODE;int Get_Data(int i);//定义省略Node*Create_u(){&&NODE*p,*Head=NULL;&for(i=0;i&N;i++)&{&&VP=New NODE;&&P-&Data=Get_Data(i);&&________________;&&________________;&}&return H}
hoho,要实现倒序的话,就在原链表的最左边插入元素,然后因为是逆序,再把head指向新插入的元素。
&
#define N 10typedef struct Node{&&struct Node*}NODE;int Get_Data(int i);//定义省略Node*Create_u(){&&NODE*p,*Head=NULL;&for(i=0;i&N;i++)&{&&VP=New NODE;&&P-&Data=Get_Data(i);&&P-&next=H&&&&&&&&&&&&&&&&&&&&& //每次把新结点的next指针指向Head&&Head=p;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //再改变Head指针&}&return H}
这样的话,重Head开始输出链表,就能得到倒序的原序列了。
不知道能不能帮到你呢^_____^
那VP=New NODE有什么用呢?谢谢
其实应该是P=new node 吧{=&&&&&&&&&&&& =}
上面都没有定义指针VP。
其实是申请的^___^
P=的意思就是给指针p指向的地址申请一个node类型的空间。
申请完成之后才能进行下面的操作。
其实就好像是你想请假,你必须先拿似的^______^
明白否呢?
的感言:好的,谢谢
相关知识等待您来回答
编程领域专家单向链表_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢}

我要回帖

更多关于 typedef int status 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信