线性链表是存储结构还是逻辑结构

vv神仙2022-10-04 11:39:541条回答

已提交,审核后显示!提交回复

共1条回复
帛盐 共回答了14个问题 | 采纳率92.9%
存储结构
1年前

相关推荐

能用二分法进行查找的是A 顺序存储的有序线性表B 线性链表C 二叉链表D 有序线性链表
aiwenyue1年前1
taishl 共回答了16个问题 | 采纳率100%
正确的是:A
链表是不能采用二分查找的,因为链表不具备随机访问特性.
二分查找的必要条件是:
线性表,有序;
已知单项线性链表的结点定义如下( )
已知单项线性链表的结点定义如下( )
struct node
{
int data;
struct node *next;
} *pt1;
已知p为链表中的一个结点,它的后继结点是q (p->next指向q),则删除结点q的语句( )
A)free(q);
B)free(q); pt1 = p->next; p->next = pt1->next;
C)pt1 = p->next; free(q); p->next = pt1->next;
D)pt1 = p->next; p->next = pt1->next; free(q);
答案是选C,
飞雨放歌1年前1
坤宠最棒13 共回答了25个问题 | 采纳率76%
答案是全错.
正确答案是
pt1 = q->next; free(q); p->next = pt1;
原因:
设这个链表依次是p->q->A->……
如果要删除q,其实就是变成p->A->……
关键在于,直接free(q)的话,q->next,也就是A的地址就丢失了.
所以在free(q)之前,先要保存A的地址.
pt1 = q->next; // q的next就是A的地址
free(q);
p->next = pt1; // p的next变成A的地址
下列陈述中正确的是 A) 线性链表是线性表的链式存储结构
下列陈述中正确的是 A) 线性链表是线性表的链式存储结构
A) 线性链表是线性表的链式存储结构
B) 栈与队列是非线性结构
C) 双向链表是非线性结构
D) 只有根结点的二叉树是线性结构
惘然331年前2
happy叶儿 共回答了26个问题 | 采纳率88.5%
这个我不懂
下列陈述中正确的是 A) 线性链表是线性表的链式存储结构B) 栈与队列是非线性结构 C) 双向链表是非线性结构
下列陈述中正确的是 A) 线性链表是线性表的链式存储结构B) 栈与队列是非线性结构 C) 双向链表是非线性结构
D) 只有根结点的二叉树是线性结构
新大树根1年前2
xiaoxuewansui1 共回答了17个问题 | 采纳率88.2%
线性表、栈、队列属于线性结构,只有二叉树是非线性结构。这题选A
求用PRIORELEM算法做一个线性链表
求用PRIORELEM算法做一个线性链表
PriorElem(L,cur_e ,&pre_e)
初始条件:线性表L已存在。
操作结果:若cur_e是L的数据元素,且不是第一个,则用pre_e返回它的前驱,否则操作失败,pre_e无定义
paopaocln1年前1
没有神话 共回答了21个问题 | 采纳率95.2%
首先实现一个单链表,代码如下:#include #include #include #include typedef struct student { int data; struct student *...
一道关于线性链表的问题下列对线性链表说法正确的是:A、各数据节点的储存空间可以不连续,但他们的存储顺序与逻辑顺序必须一致
一道关于线性链表的问题
下列对线性链表说法正确的是:
A、各数据节点的储存空间可以不连续,但他们的存储顺序与逻辑顺序必须一致
B、各数据节点的存储顺序与逻辑顺序可以不一致,但他们的存储空间不需要连续
C、进行插入和删除数据时,不需要移动表中元素
D、上述都不正确
我明白C为什么对,求大神说下B怎么错的?
醉雨飘飘1年前0
共回答了个问题 | 采纳率
3道PASCAL问题一些PASCAL问题 从键盘读入10个整数,请将这10个整数按读入的方式逆序建立一个线性链表,并求其
3道PASCAL问题
一些PASCAL问题 从键盘读入10个整数,请将这10个整数按读入的方式逆序建立一个线性链表,并求其中最大数和最小数.
从键盘读入10个整数,请将这10个整数按读入的顺序建立一个线性链表,找出其中的最大值,并将其删除。
现有一从小到大排好序的数列,请你利用这n个有序数按读入的顺序建立一个线性链表。从键盘读入x 的值,在一个这个线性链表中查找x的值,如果存在x的值,则删除x的值,如果不存在x的值,则将x插入相应的位置,使得线性链表仍然有序。
wangbibn1年前1
Lorry168 共回答了19个问题 | 采纳率84.2%
第一题:var a:array[1..10]of longint; i,maxans,minans:longint;function max(x,y:longint):longint;begin if x>y then exit(x) else exit(y);end;function min(x,y:longint):longint;begin if xy then...
逆转线性列表逆转一个线性链表,即指在不增加新的链结点空间的前提下,使线性表(a1, a2, a3, …, an-1, a
逆转线性列表
逆转一个线性链表,即指在不增加新的链结点空间的前提下,使线性表(a1, a2, a3, …, an-1, an)变成(an, an-1, …, a3, a2, a1)。
waitlly1年前1
一万年的孤寂 共回答了13个问题 | 采纳率69.2%
/*---reverseList.c---------逆置现行链表的demo,
外加了创建和打印链表的函数。希望对你有用--------------------------------------*/
#include
#include
typedef struct point{
int data;
struct point *next;
} node;
node *reverse(node *list) /*反转*/
{
node *t1=NULL,*t2;
while (list)
{
t2=t1;
t1=list;
list=list->next ;
t1->next =t2;

}
return t1;
}
node *creatList(void)
{
node *list=NULL;
int i;
scanf("%d",&i);
if (i!=-1) {
list=malloc(sizeof(node));
list->data =i;
list->next =creatList();
}
return list;
}
void printList(node *list)
{
while (list!=NULL)
{
printf("%dt",list->data );
list=list->next ;
}
}
int main(void)
{
node *list=creatList();
printList(list);
putchar(10);
list=reverse(list);
printList(list);
return 0;
}
求 实现两个链表的合并一、 设计目的 1.掌握线性链表的建立。 2.掌握线性链表的基本操作。 三、 设计内容和要求 (1
求 实现两个链表的合并
一、 设计目的
1.掌握线性链表的建立。
2.掌握线性链表的基本操作。
三、 设计内容和要求
(1) 建立两个链表A和B,链表元素个数分别为m和n个。
(2) 假设元素分别为(x1,x2,…xm),和(y1,y2, …yn)。把它们合并成一个线形表C,使得:
当m>=n时,C=x1,y1,x2,y2,…xn,yn,…,xm
当n>m时,C=y1,x1,y2,x2,…ym,xm,…,yn
输出线形表C
(3) 用直接插入排序法对C进行升序排序,生成链表D,并输出链表D。
(4) 能删除指定单链表中指定位子和指定值的元素。
元旦快乐1号1年前1
奶奶来了 共回答了21个问题 | 采纳率90.5%
我下面这个代码自己测试通过,就是少了一个删除功能,很容易额,自己加上去吧(没有任何错误)#include
#include
int m, n;
int count = 1;struct Node
{
int data;
struct Node *next;
}*A,*B,*C,*D;
//打印AList列表
void printList(struct Node *AList)
{
struct Node *post; post = AList->next;
switch(count)
{
case 1:
printf("nListA: ");
break;
case 2:
printf("nListB: ");
break;
case 3:
printf("nListC: ");
break;
case 4:
printf("nListD: ");
break;
default:
printf("nList: ");
break;
} while (post)
{
printf("%d ",post->data);
post = post->next;
} count ++;
}
//初始化表头,列表含有表头
void init()
{
A = (struct Node*)malloc(sizeof(struct Node));
A->data = 0;
A->next = 0;
B = (struct Node*)malloc(sizeof(struct Node));
B->data = 0;
B->next = 0;
C = (struct Node*)malloc(sizeof(struct Node));
C->data = 0;
C->next = 0;
D = (struct Node*)malloc(sizeof(struct Node));
D->data = 0;
D->next = 0;
}//读取列表A和B
void ReadListAB()
{
int i;
struct Node *post;
struct Node *pre;
// 输入列表长度
printf("m="); scanf("%d",&m);
printf("n="); scanf("%d",&n);//读取列表A
pre = A;
for(i=1; idata);
post->next = 0;
pre->next = post;
pre = post;
}
//读取列表B
pre = B;
for(i=1; idata);
post->next = 0;
pre->next = post;
pre = post;
}
}
//合并列表A和B
void MergeABToC()
{
int i;
struct Node *pre, *postA, *postB, *postC; pre = C;
postA = A->next;
postB = B->next;

if(m >= n)
{
for(i=1; idata = postA->data;
postC->next = 0;
pre->next = postC;
pre = postC;
postC = (struct Node*)malloc(sizeof(struct Node));
postC->data = postB->data;
postC->next = 0;
pre->next = postC;
pre = postC; postA = postA->next;
postB = postB->next; }
for(i=n+1; idata = postA->data;
postC->next = 0;
pre->next = postC;
pre = postC;

postA = postA->next;
}
}
else
{
for(i=1; idata = postB->data;
postC->next = 0;
pre->next = postC;
pre = postC;
postC = (struct Node*)malloc(sizeof(struct Node));
postC->data = postA->data;
postC->next = 0;
pre->next = postC;
pre = postC; postA = postA->next;
postB = postB->next; }
for(i=m+1; idata = postB->data;
postC->next = 0;
pre->next = postC;
pre = postC;

postB = postB->next;
}
}

}//使用直接插入法,将C排序输出D
void SortCToD()
{
struct Node *pre, *postC, *postD, *lopD;
int len;
//表示总的长度
len = m + n;
pre = D; //指向D有序数列的尾指针
postC = C->next; //指向C列表 //列表D第一个节点加入
postD = (struct Node*)malloc(sizeof(struct Node));
postD->data = postC->data;
postD->next = 0; pre->next = postD;
pre = postD;
postC = postC->next;
while (postC)
{
//pre为指向插入的前一个节点,lopD是指向插入的后一个节点
pre = D;
lopD = D->next; while (lopD)
{
if (lopD->data > postC->data)
break;
else
{
pre = lopD;
lopD = lopD->next;
} } //将节点插入
postD = (struct Node*)malloc(sizeof(struct Node));
postD->data = postC->data;
postD->next = 0; pre->next = postD;
postD->next = lopD;


//循环条件
postC = postC->next;

}
}void main(void)
{
init();
ReadListAB();
MergeABToC();
SortCToD(); printList(A);
printList(B);
printList(C);
printList(D);
}