大连理工大学《数据结构》作业2016-参考答案
- 格式:pdf
- 大小:450.09 KB
- 文档页数:26
Status; ElemType;
typedef struct node { ElemType data; struct node *link; }Lnode, *LinkList; //头插法建立单链表 void Create_L1(LinkList &L, int n) { LinkList p; int i; L=(LinkList)malloc(sizeof(Lnode)); L->link = NULL; for (i = n; i > 0; --i) { p=(LinkList)malloc(sizeof(Lnode)); scanf("%d",&p->data); p-> link = L-> link; L-> link = p; } } //尾插法建立单链表 void Create_L2(LinkList &L,int n) { LinkList s, p; int i; L=(LinkList)malloc(sizeof(Lnode)); L->data=0; L->link=NULL;
数据结构作业参考答案
ElemType *p,*q; if((i<1) || (i>L.length+1)) return (ERROR); else { q=&(L.elem[i-1]); for(p=&(L.elem[L.length-1]);p>=q;--p) *(p+1)=*p; *q=e; ++L.length; return (OK); } } //顺序表显示 void xsList(SqList L) { int i=L.length,k; for(k=0;k<i;k++) printf("%d ",L.elem[k]); printf("\n"); } //顺序表逆置 void nizhi(SqList &L) { int i=0,j=L.length-1; ElemType temp; for(;i<j;i++,j--) { temp=L.elem[i]; L.elem[i]=L.elem[j]; L.elem[j]=temp; } } main() { SqList L; char flag1='y',flag2='n'; int i; ElemType k;
}
//求第 i 个元素值 Status GetElem_L(LinkList L, int i, ElemType &e) { int j=1; LinkList p=L->link; while(p&&j<i) { p=p->link; j++; } if(!p||j>i) return ERROR; e=p->data; return OK; } //显示单链表中元素 void xsList(LinkList L) { LinkList p=L->link; while(p) { printf("%d ",p->data); p=p->link; } } //删除大于 mink 且小于 maxk 的元素 void DelList(LinkList &L, ElemType mink, ElemType maxk) { LinkList p=L,q; while(p->link&&p->link->data<mink) p=p->link;
#include<stdio.h> #include<malloc.h>
数据结构作业参考答案
#include<process.h> #define #define #define #define #define #define typedef typedef TRUE FALSE OK ERROR INFEASIBLE OVERFLOW int int 1 0 1 0 -1 -2
2. 从键盘读入 n 个整数(升序) ,请编写算法实现: (1) CreateList():建立带表头结点的单链表; (2) PrintList():显示单链表, (形如:H->10->20->30->40); (3) InsertList():在有序单链表中插入元素 x; (4) ReverseList():单链表就地逆置; (5) DelList():在有序单链表中删除所有值大于 mink 且小于 maxk 的 元素。 选作:使用文本菜单完成功能选择及执行。 参考答案:
数据结构作业参考答案
//有序表插入 void yxcharu(LinkList &L, ElemType e) { LinkList pre,p,s; pre=L; p=L->link; while(p&&p->data<e) { pre=p; p=p->link; } s=(LinkList)malloc(sizeof(Lnode)); s->data=e; s->link=p; pre->link=s; } main() { LinkList L; int n,i,mink,maxk; ElemType e; char choice='0'; while(choice!='q') { printf("\n****************\n"); printf("1.建立单链表 "); printf("2.取元素值 "); printf("3.查找 \n"); printf("4.插入 "); printf("5.删除 "); printf("6.显示\n"); printf("7.删除大于 mink 且小于 maxk 的元素值 printf("8.就地升序排序\n"); printf("9.就地逆置 "); printf("a.有序表插入 "); printf("q.退出\n"); printf("\n 请选择操作:"); fflush(stdin); scanf("%c",&choice);
typedef struct { ElemType *elem; int length; int listsize; }SqList; //创建空顺序表 Status InitList_Sq( SqList &L ) { L.elem = (ElemType*) malloc (LIST_INIT_SIZE*sizeof(ElemType)); if (!L.elem) exit(OVERFLOW); L.length = 0; L.listsize = LIST_INIT_SIZE; return OK; } //顺序表在第 i 个元素之前插入 e Status sxbcr(SqList &L, int i, ElemType e) {
");
数据结构作业参考答案
switch(choice) { case '1': printf("请输入单链表中结点个数:"); scanf("%d",&n); Create_L2(L,n); break; case '2': printf("请输入元素位序:"); scanf("%d",&i); GetElem_L(L,i,e); printf("元素值为:%d\n",e); break; case '3': printf("请输入要查找的元素:"); scanf("%d",&e); if(dlbcz(L,e)) printf("查找成功!"); else printf("查找失败。"); break; case '4': printf("请输入插入位置:"); scanf("%d",&i); printf("请输入要插入的元素:"); scanf("%d",&e); if(ListInsert_L(L,i,e)) printf("插入成功!单链表为:"); else printf("插入失败。"); break; case '5': printf("请输入删除位置:"); scanf("%d",&i); if(ListDelete_L(L,i,e)) printf("删除成功!"); else printf("删除失败。\n"); break; case '6': printf("\n 单链表为:"); xsList(L); break; case '7': printf("请输入 mink 和 maxk:"); scanf("%d,%d",&mink,&maxk); DelList(L,mink,maxk);
数据结构作业参考答案
q=p; while(q&&q->data<maxk) q=q->link; p->link=q; } //就地升序排序 void sh_sort(LinkList &L) { LinkList p=L->link,pre=L,q=L->link->link,u; p->link=NULL; while(q) { p=L->link; pre=L; while(p&&p->data<q->data) { pre=p; p=p->link; } u=q->link; pre->link=q; q->link=p; q=u; } } //就地逆置 void nizhi(LinkList &L) { LinkList p=L->link,q=L->link->link,u; p->link=NULL; while(q) { u=q->link; q->link=L->link; L->link=q; q=u; } }