指示。
30.阅读下列算法,并回答问题:
(1)假设L=(3,7,7,11,20,20,20,51,51),写出执行函数f30(&L)后的L;
(2)简述f30的功能。 void f30(SeqList *L) {//L为非空的有序表 int i=1,k=0;
while(i
L->length=k+1; } (1) (2)
(2012年1月)
2.某线性表中最常用的操作是在最后一个元素之后插入元素和删除第一个元素,则最节省运算时间的存储结构是( ) A.单链表 B.双链表 C.仅有头指针的单循环链表 D.仅有尾指针的单循环链表
17.线性表L=(a1,a2,…,an)用数组表示,假定删除表中任一元素的概率相同,则删除一个元素平均需要移动元素的个数是______。 32.阅读下列算法,并回答下列问题:
(1)简述该算法中标号s1所指示的循环语句的功能; (2)简述该算法中标号s2所指示的循环语句的功能。 LinkList Insertmnode(LinkList head,char x,int m) {
LinkNode*p,*q,*s; int i; char ch; p=head->next;
s1:while (p&&p->data!=x)
p=p->next;
if (p==NULL)printf(\; else {
q=p->next;
s2: for(i=1;i<=m;i++)
{
s=(LinkNode *) malloc(sizeof(LinkNode)); scanf(\%c\,&ch); s->data=ch; p->next=s;
p=s; }
p->next=q; }
return head;
} (1) (2)
34.假设以单链表表示线性表,单链表的类型定义如下:
typedef struct node { DataType data;
Struct node *next; } LinkNode,* LinkList;
编写算法,在一个头指针为head且带头结点的单链表中,删除所有结点数据域值为x的结点。函数原型为:LinkList delnode (LinkList head,DataType x)
第2章 线性表08-12年1月参考答案
(2008年1月)
2、A 3、D 17、O(n)
30、(1) (a2,a4,a6) (2)删除线性表中奇数序号元素 34、
LinkList CreateCircularList(LinkList head) { LinkList p; p=( LinkList)malloc(sizeof(LinkNode)); p->next=head; head=p;
while(p->next) p=p->next; p->next=head;
return head; }
时间复杂度为O(n)。 (2008年10月)
3、A 17、O(m + n) 30、(1) L=(21,19,0,34,30)
(2)删除顺序表中负值元素
(2009年1月)
2、B 17、4 30、
(1) head 2 8 5 7 ^
(2) 调整链表中的结点,将链表中所有值为偶数的结点移动到表的前端。 34、
void f34(LinkList head) { LinkList p,q,u,v; if(head->next==NULL) return; u=head; v=head->next; q=v; p=v->next; while(p) { if(p->data>v->data) { u=q;v=p;
} q=p;
p=p->next;
} u->next=v->next; free(v); } 方法二:
void f34(LinkList head) { LinkList p,max; if(head->next==NULL) return; max=head->next; p=max->next; while(p) { if(p->data>max->data)
max=p; p=p->next;
} p=head; while(p->next!=max)
p=p->next;
p->next=max->next; free(max); }
(2009年10月)
3、A 17、插入、删除 31、 (1) head 1 70 2 38 3 90 4 60 5 60 ^
(2) 对于表A中成绩低于60的学生,如果在表B中也有成绩记录,则将表A中的成绩修改为其在表B中的成绩,但若其在表B中的成绩高于60分,则只改为60分。
34、
void f34(SeqList *L) { int i,j=0,t; for(i=0;i
if(L->data[i]%2) {

