网友您好, 请在下方输入框内输入要搜索的题目:

题目内容 (请给出正确答案)

单链表的插入操作

procedure insert(L:linklist; I:integer; x:datatype);

var p,q:pointer;


参考答案

更多 “ 单链表的插入操作procedure insert(L:linklist; I:integer; x:datatype);var p,q:pointer; ” 相关考题
考题 论述题 3 :针对以下 C 语言程序,请按要求回答问题( 18 分)已知 link.c 源程序如下:/*link.c 程序对单向链表进行操作 , 首先建立一个单向链表 , 然后根据用户的选择可以对其进行插入节点 、删除节点和链表反转操作 */#include#includetypedef struct list_node *list_pointer; // 定义链表指针typedef struct list_node{ // 定义链表结构int data;list_pointer link;}list_node;// 用到的操作函数:list_pointer create(); // 建立一个单向链表void insert(list_pointer *p_ptr, list_pointer node); // 在 node 后加入一个新的节点void delete_node(list_pointer *p_ptr, list_pointer trail, list_pointer node);// 删除前一个节点是 trail 的当前节点 nodevoid print(list_pointer ptr); // 打印链表节点中的值list_pointer invert(list_pointer lead); // 反转链表int main(){list_pointer ptr=NULL;list_pointer node, trail;list_pointer *p = ptr;int choose, location, i;printf("you should create a link first:\n");// 建立一个单向链表:ptr=create(); /* ptr 指向链表的第一个节点 */print(ptr);// 根据用户的不同选择进行相应的操作:printf("input number 0, you can quit the program\n");printf("input number 1, you can insert a new node to link\n");printf("input number 2, you can delete a node from the link\n");printf("input number 3, you can invert the link\n");printf("please input your choice\n");scanf("%d", choose);while(choose!=0){switch(choose){case 1:printf("you will insert a node to the link\n");printf("please input the location of the node:\n");scanf("%d", location);node = ptr;i = 1;while(ilocation){node = node-link;i++;}insert(p, node); /* p 为指向 ptr 的指针 */print(ptr);break;case 2:printf("you will delete a node from the link\n");printf("please input the location of the node:\n");scanf("%d", location);node = ptr;if(location ==1)trail = NULL;trail = ptr;i = 1;while(ilocation){trail = trail-link;i++;}node = trail-link;delete_node(p, trail, node);print(ptr);break;case 3:printf("you will invert the link\n");ptr = invert(ptr);print(ptr);break;default:break;return -1;}printf("please input your choice\n");scanf("%d", choose);}return 0;}// 根据用户的输入数值建立一个新的单向链表:list_pointer create(){int i, current, length;list_pointer p1, p2, head;printf("please input the node number of the link:\n");scanf("%d", length);printf("the number of the link is : %d\n", length);printf("please input the data for the link node:\n");i =0;p1= p2= (list_pointer) malloc(sizeof(list_node));head = p1;for(i = 0; iscanf("%d", ¤ t);p1-data = current;p2-link = p1;p2 = p1;p1 = (list_pointer) malloc(sizeof(list_node));}p2-link = NULL;return head;}……( 1 )画出主函数 main 的控制流程图。( 10 分)( 2 ) 设计一组测试用例 , 尽量使 main 函数的语句覆盖率能达到 100% 。 如果认为该函数的语句覆盖率无法达到 100% ,需说明原因。( 8 分)

考题 已知指针p和q分别指向某单链表中第一个结点和最后一个结点。假设指针x指向另一个单链表中某个结点,则在s所指结点之后插入上述链表应执行的语句为()。 A、q->next=x->next;x->next=p;B、s->next=p;q->next=x->next;C、p->next=x->next;x->next=p;D、x->next=q;p->next=x->next;

考题 针对以下C语言程序,请按要求回答问题。已知link. c源程序如下:/*link. c程序对单向链表进行操作,首先建立一个单向链表,然后根据用户的选择可以对其进行插入结点、删除结点和链表反转操作*/include<stdio. h>include<stdlib. h>typedef struct list_node * list_pointer; //定义链表指针typedef struct list_node{ //定义链表结构int data;list_pointer link;}list_node;//用到的操作函数list_pointer create(); //建立一个单向链表void insert(list_pointer * p_ptr,list_pointer node); //在node后加入一个新的结点void delete_node(list_pointer * p_ptr,list_pointer trail,list_pointer node);//删除前一个结点是trail的当前结点nodevoid print(list_pointer * p_ptr); //打印链表结点中的值list_pointer invert(list_pointer lead); //反转链表int main(){list_pointer ptr=NULL;list_pointer node,trail;list_pointer * P=&ptr;int choose,location,i;printf("you should create a link first:\n");//建立一个单向链表prt=create(); //ptr指向链表的第一个结点print(ptr);//根据用户的不同选择进行相应的操作:printf("input number 0,you can quit the program\n");printf("input number 1,you can insert a new node to link\n"):printf("input number 2,you can delete a node from the link\n");printf("input number 3,you can invert the link\n"):printf("please input you choice\n");scanf("%d",&choose);while(choose!=0){switch(choose){case 1:i=1:while(i<location){node=node->link;i++:}insert(p,node); //p为指向ptr的指针print(ptr);break;case 2:printf("you will delete a node from the link\n");printf("please input the location of the node:\n");scanf("%d",location):node=ptr;if(location==1)trail=NULL;trail=ptr;i=1:while(i<location){trail=trail->link:i++:}node=trail->link;delete_node(p,trail,node);print(ptr);break;case 3:printf("you will invert the link\n");ptr=invert(ptr);print(ptr);break;default;break;return -1;}printf("please input you choice\n");scanf("%d". &choose):}return 0;//根据用户的输入值建立一个新的单向链表:list_pointer create(){int i,current,length;list_pointer p1,p2,head;printf("please input the node number of the link:\n");scanf("%d". &length):printf("the number of the link is:%d",length);printf("please input the data for the link node:\n");i=0;p1=p2=(list_pointer)malloc(sizeof(list_node));head=p1;for(i=1;i<length;i++){scanf("%d",&current);p1->data=current;p2->link=p1;p2=p1;p1=(list_pointer)malloc(sizeof(list_node));}p2->link=NULL;return head;}画出主函数main的控制流程图。

考题 四、排序算法A.快速排序:procedure qsort(l,r:integer);var i,j,mid:integer;

考题 B.插入排序:思路:当前a[1]..a[i-1]已排好序了,现要插入a[i]使a[1]..a[i]有序。procedure insert_sort;var i,j:integer;

考题 C.选择排序:procedure sort;var i,j,k:integer;

考题 D. 冒泡排序procedure bubble_sort;var i,j,k:integer;

考题 E.堆排序:procedure sift(i,m:integer);{调整以i为根的子树成为堆,m为结点总数}var k:integer;

考题 F. 归并排序{a为序列表,tmp为辅助数组}procedure merge(var a:listtype; p,q,r:integer);{将已排序好的子序列a[p..q]与a[q+1..r]合并为有序的tmp[p..r]}var I,j,t:integer;tmp:listtype;

考题 高精度数的定义:typehp=array[1..maxlen] of integer;1.高精度加法procedure plus ( a,b:hp; var c:hp);var i,len:integer;

考题 高精度减法procedure substract(a,b:hp;var c:hp);var i,len:integer;

考题 高精度乘以低精度procedure multiply(a:hp;b:longint;var c:hp);var i,len:integer;

考题 高精度乘以高精度procedure high_multiply(a,b:hp; var c:hp}var i,j,len:integer;

考题 高精度除以低精度procedure devide(a:hp;b:longint; var c:hp; var d:longint);{c:=a div b; d:= a mod b}var i,len:integer;

考题 已知前序中序求后序procedure Solve(pre,mid:string);var i:integer;

考题 链表的定位函数loc(I:integer):pointer; {寻找链表中的第I个结点的指针}procedure loc(L:linklist; I:integer):pointer;var p:pointer;j:integer;

考题 单链表的删除操作procedure delete(L:linklist; I:integer);var p,q:pointer;

考题 执行下列语句后指针及链表的示意图为(43)。L = (LinkList) malloc ( sizeof (LNode) );P = L;for(i =0;i <=3;i ++) {P→next = (LinkList) malloc (sizeof (LNode));P = P→next;P→data = i * i + 1;}A.B.C.D.

考题 阅读以下说明和 C 代码,填补代码中的空缺,将解答填入答题纸的对应栏内。 【说明】 函数 GetListElemPtr(LinkList L,int i)的功能是查找含头结点单链表的第i个元素。若找到,则返回指向该结点的指针,否则返回空指针。 函数DelListElem(LinkList L,int i,ElemType *e) 的功能是删除含头结点单链表的第 i个元素结点,若成功则返回 SUCCESS ,并由参数e 带回被删除元素的值,否则返回ERROR 。 例如,某含头结点单链表 L 如图 4-1 (a) 所示,删除第 3 个元素结点后的单链表如 图 4-1 (b) 所示。图4-1define SUCCESS 0 define ERROR -1 typedef int Status; typedef int ElemType; 链表的结点类型定义如下: typedef struct Node{ ElemType data; struct Node *next; }Node ,*LinkList; 【C 代码】 LinkList GetListElemPtr(LinkList L ,int i) { /* L是含头结点的单链表的头指针,在该单链表中查找第i个元素结点: 若找到,则返回该元素结点的指针,否则返回NULL */ LinkList p; int k; /*用于元素结点计数*/ if (i1 ∣∣ !L ∣∣ !L-next) return NULL; k = 1; P = L-next; / *令p指向第1个元素所在结点*/ while (p (1) ) { /*查找第i个元素所在结点*/ (2) ; ++k; } return p; } Status DelListElem(LinkList L ,int i ,ElemType *e) { /*在含头结点的单链表L中,删除第i个元素,并由e带回其值*/ LinkList p,q; /*令p指向第i个元素的前驱结点*/ if (i==1) (3) ; else p = GetListElemPtr(L ,i-1); if (!p ∣∣ !p-next) return ERROR; /*不存在第i个元素*/ q = (4) ; /*令q指向待删除的结点*/ p-next = q-next; /*从链表中删除结点*/ (5) ; /*通过参数e带回被删除结点的数据*/ free(q); return SUCCESS; }

考题 阅读以下说明和C代码,填补代码中的空缺,将解答填入答题纸的对应栏内。 [说明] 函数GetListElemPtr(LinkList L,int i)的功能是查找含头结点单链表的第i个元素。若找到,则返回指向该结点的指针,否则返回空指针。 函数DelListElem(LinkList L,int i,ElemType *e)的功能是删除含头结点单链表的第i个元素结点,若成功则返回SUCCESS,并由参数e带回被删除元素的值,否则返回ERROR。 例如,某含头结点单链表L如下图(a)所示,删除第3个元素结点后的单链表如下图(b)所示。 1.jpg #define SUCCESS 0 #define ERROR -1 typedef intStatus; typedef intElemType; 链表的结点类型定义如下: typedef struct Node{ ElemType data; struct Node *next; }Node,*LinkList; [C代码] LinkListGetListElemPtr(LinkList L,int i) { /*L是含头结点的单链表的头指针,在该单链表中查找第i个元素结点; 若找到,则返回该元素结点的指针,否则返回NULL */ LinkList p; int k; /*用于元素结点计数*/ if(i<1 || !L || !L->next) return NULL; k=1; p=L->next; /*令p指向第1个元素所在结点*/ while(p ++k; } return p; } StatusDelListElem(LinkList L,int i,ElemType *e) { /*在含头结点的单链表L中,删除第i个元素,并由e带回其值*/ LinkList p,q; /*令P指向第i个元素的前驱结点*/ if(i==1) ______; else p=GetListElemPtr(L,i-1); if(!P || !p->next) return ERROR; /*不存在第i个元素*/ q=______; /*令q指向待删除的结点*/ p->next=q->next; //从链表中删除结点*/ ______; /*通过参数e带回被删除结点的数据*/ free(q); return SUCCESS; }

考题 设指针q指向单链表中结点A,指针p指向单链表中结点A的后继结点B,指针s指向被插入的结点X,则在结点A和结点B插入结点X的操作序列为()。A.p->next=s;s->next=q; B.q->next=s;s->next=p; C.p->next=s->next;s->next=p; D.s->next=p->next;p->next=-s;

考题 函数实现单链表的插入算法,请在空格处将算法补充完整。int ListInsert(LinkList L,int i,ElemType e){ LNode *p,*s;int j; p=L;j=0; while((p!=NULL)(jnext;j++; } if(p==NULL||ji-1) return ERROR; s=(LNode *)malloc(sizeof(LNode)); s-data=e; (1) ; (2) ; return OK;}/*ListInsert*/

考题 函数GetElem实现返回单链表的第i个元素,请在空格处将算法补充完整。 int GetElem(LinkList L,int i,Elemtype *e){ LinkList p;int j;p=L-next;j=1; while(pji) return ERROR;*e= (2) ;return OK;}

考题 函数实现单链表的删除算法,请在空格处将算法补充完整。int ListDelete(LinkList L,int i,ElemType *s){ LNode *p,*q; int j; p=L;j=0; while(( (1) )(jnext;j++; } if(p-next==NULL||ji-1) return ERROR; q=p-next; (2) ; *s=q-data; free(q); return OK;}/*listDelete*/

考题 填空题函数实现单链表的删除算法,请在空格处将算法补充完整。int ListDelete(LinkList L,int i,ElemType *s){ LNode *p,*q; int j; p=L;j=0; while(( (1) )(jnext;j++; } if(p-next==NULL||ji-1) return ERROR; q=p-next; (2) ; *s=q-data; free(q); return OK;}/*listDelete*/

考题 填空题函数实现单链表的插入算法,请在空格处将算法补充完整。int ListInsert(LinkList L,int i,ElemType e){ LNode *p,*s;int j; p=L;j=0; while((p!=NULL)(jnext;j++; } if(p==NULL||ji-1) return ERROR; s=(LNode *)malloc(sizeof(LNode)); s-data=e; (1) ; (2) ; return OK;}/*ListInsert*/

考题 填空题函数GetElem实现返回单链表的第i个元素,请在空格处将算法补充完整。 int GetElem(LinkList L,int i,Elemtype *e){ LinkList p;int j;p=L-next;j=1; while(pji) return ERROR;*e= (2) ;return OK;}