当前位置:文档之家› 数据结构上机试题

数据结构上机试题

数据结构实验报告姓名:张盈武学号:136538105数据结构上机试题一、顺序表的操作(1)插入元素操作:将新元素x插入到顺序表a中第i个位置。

(2)删除元素操作:删除顺序表a中第i个元素。

#include<stdio.h>#include<malloc.h>#include<conio.h>#define overflow 0#define list_size 100#define ok 1#define maxsize 80#define listincrement 10#define error 1typedef int elemtype;typedef struct{int *elem;int length;int listsize;}list;int init(list &l){l.elem=(int *)malloc(maxsize *sizeof(int)); if(!l.elem) return(overflow);l.length=0;l.listsize=list_size;return ok;}void create(list *l){int i,n;printf("创建一个有序表:\n");printf("输入元素个数:");scanf("%d",&n);l->length=n;for(i=0;i<n;i++){printf("输入第%d个元素:",i+1);scanf("%d",&l->elem[i]);printf("\n");}}int insert(list &l,int i, elemtype & e ) {if(i<1||i>l.length+1) return error; elemtype *q,*p;q=&(l.elem[i-1]);p=&(l.elem[l.length-1]);for(p;p>=q;--p) *(p+1)=*p;*q=e;++l.length;return ok;}int printflist(list l){for(int i=0;i<=l.length-1;i++){printf("%d",l.elem[i]);}return ok;}int deletelist(list &l,int i,elemtype &e) {if((i<1)||(i>l.length)) return error;for( i;i<=l.length-1;i++) l.elem[i]=l.elem[i+1];--l.length;return ok;}int main(){list la;init(la);create(&la);printflist(la);printf("是否要插入元素:(输入1为是,0否)"); int s;scanf("%d",&s);if(s==1){printf("输入要插入的位置:");int i;scanf("%d",&i);printf("输入要插入的元素:");int a;scanf("%d",&a);insert(la,i,a);}printflist(la);printf("是否要删除元素:(1为是,0为否)"); int n;scanf("%d",&n);if(n==1){printf("输入要删除的位置:");int m;scanf("%d",&m);printf("输入要删除的元素:");int w;scanf("%d",&w);deletelist(la,n,m);printflist(la);}return ok;}二、单链表的操作(1)创建一个带头结点的单链表;(2)插入元素操作:将新元素x插入到单链表中第i 个元素之后;(3)删除元素操作:删除单链表中值为x的元素;#include<stdio.h>#include<stdlib.h>#include<malloc.h>#include<conio.h>#define error 0#define ok 1#define equal 1#define overflow -1#define list_size 100#define listincrement 10#define null 0typedef int elemtype;typedef struct lnode{elemtype data;struct lnode *next;lnode *head;}lnode,* linklist;linklist init(linklist &head){ int i=1;int j;linklist l;head=(lnode*)malloc(sizeof(lnode)); head->next=null;do{printf("请输入第%d个数:\n",i);l=(lnode*)malloc(sizeof(lnode));scanf("%d",&l->data);l->next=head->next;head->next=l;++i;printf("还输吗?(1位输入;0为不。

)"); scanf("%d",&j);}while( j==1);return head;}int insert(linklist &head,int i,int e) {linklist p=head->next;while(p&&j<i-1){p=p->next;++j;}if(!p||j>i-1){printf("error!\n");return 0;}linklist s;s=(linklist)malloc(sizeof(linklist));s->data=e;s->next=p->next;p->next=s;return ok;}int deletenode(linklist &head,int i,elemtype &e) {linklist s;s=head->next;linklist q;int j=0;while(s->next&&j<i-1) {s=s->next;++j;}if(!s||j>i-1){printf("该元素不存在!"); return 0;}q=s->next;e=q->data;s->next=q->next;free(q);return ok;}int print(linklist &head) { linklist l;l=head->next;do{printf("%d",l->data);l=l->next;}while(l!=null);printf("\n");return ok;}main(){linklist la;init(la);print(la);printf("输入要插入的位置:\n");int i;scanf("%d",&i);printf("请输入该元素:\n");int e;scanf("%d",&e);insert(la,i,e);print(la);printf("输入要删除的元素位置:\n"); int a;scanf("%d",&a);printf("输入要删除的元素:\n");int k;scanf("%d",&k);deletenode(la,a,k);print(la);}三、在顺序栈上实现将非负十进制数转换成二进制数。

#include<stdlib.h>#include<stdio.h>#define ok 1#define error 0#define null 0typedef int elemtype;static int k=0;typedef struct snode{elemtype data;snode *next;}snode,*linkstack;linkstack push(linkstack &top,elemtype e) {top=(linkstack)malloc(sizeof(snode));top->next=null;snode *p;p=(snode *)malloc(sizeof(snode));p=top;p->data=e;top->next=p;return top;}linkstack pop(linkstack &top){if(!top->next){printf("error");return error;}int e=top->data;linkstack h=top;top=top->next;printf("%d",e);free(h);return top;}int ter(linkstack &top, int i){int j=0,f=0;do{j=i%2;i=i/2;push(top,j);f++;}while(i!=0);return ok;}main(){linkstack la;printf("输入一个十进制的数:\n"); int i;scanf("%d",& i);ter(la,i);pop(la);pop(la);}四、在顺序表中采用顺序查找算法和折半查找算法寻找关键字X在顺序表中的位置。

相关主题