❶ 一個很有 挑戰的問題!一個關於數據結構的問題(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上下,那上面很全的!