当前位置:首页 » 编程语言 » 数据结构1000个问题与解答C语言版
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

数据结构1000个问题与解答C语言版

发布时间: 2022-02-24 08:48:01

❶ 一个很有 挑战的问题!一个关于数据结构的问题(c语言版的)

(1)
int i=1;
ptr=C;
while(ptr->R<>C){i++;ptr=ptr->R;}

(2)
C[k-1]->F->R=C[k-1]->R;
C[k-1]->R->F=C[k-1]->F;

(3)
C[k-1]->R=ptr;
ptr->F=C[k-1];
ptr->R=C[k];
C[k]->F=ptr;

写作业不许偷懒!自己把缺的补上

❷ 数据结构C语言版问题

1.实现求最大值的函数如下:
template
<class
Type>
ListNode
<Type>
*
List
<Type>
::
Max
(
)
{
//在单链表中进行一趟检测,找出具有最大值的结点地址,
如果表空,
返回指针NULL
if
(
first->link
==
NULL
)
return
NULL;
//空表,
返回指针NULL
ListNode
<Type>
*
pmax
=
first->link,
p
=
first->link->link;
//假定第一个结点中数据具有最大值
while
(
p
!=
NULL
)
{
//循环,
下一个结点存在
if
(
p->data
>
pmax->data
)
pmax
=
p;
//指针pmax记忆当前找到的具最大值结点
p
=
p->link;
//检测下一个结点
}
return
pmax;
}
2.实现从一维数组A[n]建立单链表的函数如下:
template
<class
Type>
void
List
<Type>
::
Create
(
Type
A[
],
int
n
)
{
//根据一维数组A[n]建立一个单链表,使单链表中各元素的次序与A[n]中各元素的次序相同
ListNode<Type>
*
p;
first
=
p
=
new
ListNode<Type>;
//创建表头结点
for
(
int
i
=
0;
i
<
n;
i++
)
{
p->link
=
new
ListNode<Type>
(
A[i]
);
//链入一个新结点,
值为A[i]
p
=
p->link;
//指针p总指向链中最后一个结点
}
p->link
=
NULL;
}
或者采用递归方法实现
template<Type>
void
List<Type>
::
create
(
Type
A[
],
int
n,
int
i,
ListNode<Type>
*&
p
)
{
//私有函数:递归调用建立单链表
if
(
i
==
n
)
p
=
NULL;
else
{
p
=
new
ListNode<Type>(
A[i]
);
//建立链表的新结点
create
(
A,
n,
i+1,
p->link
);
//递归返回时p->link中放入下层p的内容
}
}
template<Type>
void
List<Type>
::
create
(
Type
A[
],
int
n
)
{
//外部调用递归过程的共用函数
first
=
current
=
new
ListNode<Type>;
//建立表头结点
create
(
A,
n,
0,
first->link
);
//递归建立单链表
}
3,
实现在非递减有序的单链表中删除值相同的多余结点的函数如下:
template
<class
Type>
void
List
<Type>
::
tidyup
(
)
{
ListNode<Type>
*
p
=
first->link,
temp;
//检测指针,
初始时指向链表第一个结点
while
(
p
!=
NULL
&&
p->link
!=
NULL
)
//循环检测链表
if
(
p->data
==
p->link->data
)
{
//若相邻结点所包含数据的值相等
temp
=
p->first;
p->link
=
temp->link;
//为删除后一个值相同的结点重新拉链
delete
temp;
//删除后一个值相同的结点
}
else
p
=
p->link;
//指针p进到链表下一个结点
}
参考别人的,这题目我才不会做。

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

C=CreatList;
while(IsNotEmpty(A) && IsNotEmpty(B))
{x=GetHead(A);
y=GetHead(B);
if(x>=y)
{
m=pop(A);
}
else
{
m=pop(B);
}
push(C,m);
}
while(IsNotEmpty(A))
{
m=pop(A);
push(C,m);
}
while(IsNotEmpty(B))
{
m=pop(B);
push(C,m);
}

复杂度当然是O(m+n),m,n分别是A,B的长度

❹ 数据结构c语言版的书推荐

《C程序设计的抽象思维》
出版社:机械工业出版社
作者:(美)罗伯特着
推荐理由:标准答案是“斯坦福大学教授写的教材”,实际上,这本书我自己看过(C方面第二本入门加进阶书籍),这才敢向你推荐。里面有你要的数据结构。

还有,重要的话说三遍:
清华出版社是坑
清华出版社是坑
清华出版社是坑

不是诬蔑,如果有知友不相信,可以去看清华出版社出的《PHP入门》(明日)、《C语言》(谭)。

❺ 数据结构c语言版问题

A[0][0]-A[1][0]-A[2][0]-A[3][0]-A[4][0]-A[5][0]-A[6][0]-A[7][0]-A[8][0]-A[9][0]-A[0][1]-A[1][1]-A[2][1]-A[3][1]-A[4][1]-A[5][1]-A[6][1]-A[7][1]-A[8][1]-A[9][1]-A[0][2]-A[1][2]-A[2][2]-A[3][2]-A[4][2]-A[5][2]-A[6][2]-A[7][2]-A[8][2]-A[9][2]-
按列序(就是固定列的索引,先存储列索引为0、行索引0-9的元素。然后列索引+1,存储列索引为1、行索引为0-9的元素……)存储的二维数组,所以A[6][2]的地址是200+1*26=226

❻ 跪求数据结构(c语言版)的几个问题解答

实验一:(新手初试牛刀 如有缺点请指教)
#include <stdlib.h>
#include <stdio.h>
struct student
{
char name[20];
int number;
double score;
student * next;
};
bool empty(student * head);
void print(student *head)
{
student * p=head->next;
if(empty(head))
{
printf("\n空链表\n");
}
else
{
printf("\n姓名\t学号\t成绩");
while(p)
{
printf("\n%s\t%d\t%d\n",p->name,p->number,p->score);
p=p->next;
}
}
}
bool empty(student * head)
{
if(head->next==NULL)
return true;
else
return false;
}
void create(student * head)
{
student *q=(student *) malloc (sizeof(student));
student *p=head;
printf("\n请输入姓名: ");
scanf("%s",q->name);
printf("学号=");
scanf("%d",&q->number);
printf("成绩=");
scanf("%d",&q->score);
q->next=NULL;
while(p->next)p=p->next;
p->next=q;
print(head);
}
void Delete(student *head,int number)
{
student *p=head;
student *q=p;
while(q->next)
{ q=q->next;
if(q->number==number)
{
if(q->next==NULL)
{
p->next=NULL;
}
else
{
p->next=q->next;
}
}
p=q;
}
print(head);
}
void main()
{
student * head=(student *) malloc (sizeof(student));
int i,n;
head->next=NULL;
printf("请选择 1.插入 2.删除 0.退出\n");
scanf("%d",&i);
while(i)
{
if(i==1)
{
create(head);
}
else if(i==2)
{
printf("\n请输入要删除的学号:");
scanf("%d",&n);
Delete(head,n);
}
printf("请选择 1.插入 2.删除 0.退出\n");
scanf("%d",&i);
}

}

❼ 问个数据结构的问题c语言版的

#include "stdio.h"
#include "stdlib.h"
typedef int datatype;
typedef struct node
{datatype data;
struct node *lchild,*rchild;
}bitree;
bitree *root;
bitree *creat_preorder()
{datatype x;
bitree *t;
printf("\n\t\t请输入正整数以0为结束符号");
scanf("%d",&x);
if(x==0) t=NULL;
else
{t=(struct node*)malloc(sizeof(bitree));
t->data=x;
t->lchild=creat_preorder();
t->rchild=creat_preorder();
}
return(t);
}

void main(void) //只要在这边加就好了
{
root = creat_preorder;
//root前面定义了,creat_preorder这个函数的返回值和root的类型一样
//所以赋值给了root
}

其他的操作,我也不知道你要做什么,只能帮到这个地方了~
一起学习,我也是菜鸟

❽ 一个小问题,数据结构(C语言版)

它们只能用于定义变量,不能像类那样引用!

************************************************

typedef用于创建自定义类型,例如在这里:

typedef struct LNode {
ElemType data;
struct LNode *next;
}*Link,*Position;

就是定义了两个自定义指针类型Link和Position,它们可以用于定义变量,而且和struct LNode *是"同义词"

typedef struct {
Link head,tail;
int len;
}LinkList;
就是定义一个自定义类型LinkList,它和
struct {
Link head,tail;
int len;
}
是同义词,可以用来定义这个结构体类型的变量。

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

/*

原表:

0 1 2 3 4 5 6 7 8 9

10

在索引5处插入55

0 1 2 3 4 55 5 6 7 8

9 10

删除索引3处的成员

0 1 2 4 55 5 6 7 8 9

10

Press any key to continue

*/

#include<stdio.h>
#include<stdlib.h>

#defineMAXLEN100//最大表长
#defineN10//每行显示数据个数
typedefintdataType;
typedefstruct_tag{
dataTypedata[MAXLEN];
intlength;
}LIST,*pList;

pListCreateList(dataTypea[],intn){//创建一个表
inti;
LIST*NewList=(LIST*)malloc(sizeof(LIST));
if(n>MAXLEN)n=MAXLEN;
for(i=0;i<n;++i)
NewList->data[i]=a[i];
NewList->length=n;
returnNewList;
}

voidShowList(LIST*L){
inti;
for(i=0;i<L->length;++i){
printf("%d",L->data[i]);
if(i%N==9)printf(" ");//每行显示N个数据
}
if(i%N!=0)printf(" ");//不满一行加一个新行符
}

voidEraseElem(LIST*L,intindex){//删除索引为index的元素
inti;
if(index>L->length-1){
--L->length;
return;
}
if(index<0)index=0;
for(i=index;i<L->length-1;++i)
L->data[i]=L->data[i+1];
--L->length;
}

intInsertElem(LIST*L,intindex,dataTypedata){//将data插到index索引位置
inti;
if(index>=MAXLEN)return0;
if(index>L->length-1){
L->data[L->length-1]=data;
++L->length;
return1;
}
if(index<0)index=0;
for(i=L->length;i>index;--i)
L->data[i]=L->data[i-1];
L->data[index]=data;
++L->length;
return1;
}

intmain(){
LIST*mylist;
dataTypear[]={0,1,2,3,4,5,6,7,8,9,10};
intn=sizeof(ar)/sizeof(ar[0]);
intindex;
dataTypemember;
mylist=CreateList(ar,n);
printf("原表: ");
ShowList(mylist);
index=5;
member=55;
printf("在索引%d处插入%d ",index,member);
InsertElem(mylist,index,member);
ShowList(mylist);
index-=2;
printf("删除索引%d处的成员 ",index);
EraseElem(mylist,index);
ShowList(mylist);
free(mylist);
return0;
}

❿ 数据结构(C语言版):1000个问题与解答哪里有下载

是 严蔚敏版的吗 ?如果是的话就去CSDN上下,那上面很全的!