实验报告专用纸
- 格式:doc
- 大小:471.00 KB
- 文档页数:25
延安大学计算机学院实验报告专用纸实验室:机号:实验日期:年月日学号1060315014032 陈世龙班级计科15-1实验名称线性表实验二:线性表中插入元素操作#include <stdio.h>#include <stdlib.h>#include <malloc.h>#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define ElemType int#define MAXSIZE 100 /*此处的宏定义常量表示线性表可能达到的最大长度*/typedef struct{ElemType elem[MAXSIZE]; /*线性表占用的数组空间*/int last; /*记录线性表中最后一个元素在数组elem[ ]中的位置(下标值),空表置为-1*/ }SeqList;int InsList(SeqList *L,int i,ElemType e){int k;if((i<1) || (i>L->last+2)) /*首先判断插入位置是否合法*/学号1060315014032 陈世龙班级计科15-1实验名称线性表实验三:线性表中删除元素操作#include <stdio.h>#include <stdlib.h>#include <malloc.h>#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define ElemType int#define MAXSIZE 100 /*此处的宏定义常量表示线性表可能达到的最大长度*/typedef struct{ElemType elem[MAXSIZE]; /*线性表占用的数组空间*/int last; /*记录线性表中最后一个元素在数组elem[ ]中的位置(下标值),空表置为-1*/ }SeqList;int DelList(SeqList *L,int i,ElemType *e){int k;if((i<1)||(i>L->last+1)){printf("删除位置不合法!");return(ERROR);}*e = L->elem[i-1]; /* 将删除的元素存放到e所指向的变量中*/for(k=i; i<=L->last; k++)学号1060315014032 陈世龙班级计科15-1实验名称线性表L->elem[k-1] = L->elem[k]; /*将后面的元素依次前移*/ L->last--;return(OK);}void main(){SeqList *l;int p,r;int *q;int i;l = (SeqList*)malloc(sizeof(SeqList));q = (int*)malloc(sizeof(int));printf("请输入线性表的长度:");scanf("%d",&r);l->last = r-1;printf("请输入线性表的各元素值:\n");for(i=0; i<=l->last; i++){scanf("%d",&l->elem[i]);}printf("请输入要删除的元素位置:\n");scanf("%d",&p);DelList(l,p,q);printf("删除的元素值为:%d\n",*q);}实验四:线性表的合并#include <stdio.h>#include <stdlib.h>#include <malloc.h>#define OK 1延安大学计算机学院实验报告附页学号1060315014032 陈世龙班级计科15-1实验名称线性表for(i=0; i<=la->last; i++){scanf("%d",&la->elem[i]);}lb=(SeqList*)malloc(sizeof(SeqList));printf("请输入线性表B的长度:");scanf("%d",&r);lb->last = r-1;printf("请输入线性表B的各元素值:\n");for(i=0; i<=lb->last; i++){scanf("%d",&lb->elem[i]);}lc=(SeqList*)malloc(sizeof(SeqList));merge(la,lb,lc);printf("合并后线性表C中的元素为:\n");for(i=0; i<=lc->last; i++){printf("%d ",lc->elem[i]);}}实验五:用头插法建立单链表#include <stdio.h>#include <stdlib.h>#include <malloc.h>#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#include <stdlib.h>延安大学计算机学院实验报告附页延安大学计算机学院实验报告附页学号1060315014032 陈世龙班级计科15-1实验名称线性表实验六:用尾插法建立单链表#include <stdio.h>#include <stdlib.h>#include <malloc.h>#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0typedef char ElemType;typedef struct Node /*结点类型定义*/{ElemType data;struct Node * next;}Node, *LinkList; /* LinkList为结构指针类型*/void init_linklist(LinkList *l)/*对单链表进行初始化*/{*l=(LinkList)malloc(sizeof(Node));(*l)->next=NULL;}void CreateFromTail(LinkList L){Node *r, *s;char c;int flag =1; /*设置一个标志,初值为1,当输入"$"时,flag为0,建表结束*/r=L; /*r指针动态指向链表的当前表尾,以便于做尾插入,其初值指向头结点*/ while(flag) /*循环输入表中元素值,将建立新结点s插入表尾*/{c=getchar();if(c!='$'){延安大学计算机学院实验报告附页学号1060315014032 陈世龙班级计科15-1实验名称线性表s=(Node*)malloc(sizeof(Node));s->data=c;r->next=s;r=s;}else{flag=0;r->next=NULL; /*将最后一个结点的next链域置为空,表示链表的结束*/ }}}void main(){LinkList l;Node *p;init_linklist(&l);printf("用尾插法建立单链表,请输入链表数据,以$结束!\n");CreateFromTail(l);p = l->next;while(p!=NULL){printf("%c\n",p->data);p=p->next;}}实验七:查找线性表结点值#include <stdio.h>#include <stdlib.h>#include <malloc.h>#define OK 1学号1060315014032 陈世龙班级计科15-1实验名称线性表return p; /* 找到了第i个结点*/ elsereturn NULL; /* 找不到,i≤0或i>n */ }void main(){LinkList l;Node *p;int j;init_linklist(&l);printf("请输入链表数据,以$结束!\n");CreateFromTail(l);p = l->next;while(p!=NULL){printf("%c\n",p->data);p=p->next;}printf("请输入要查找的结点序号:\n");scanf("%d",&j);p = Get(l,j);if(p!=NULL)printf("该结点的值为:%c\n",p->data);elseprintf("未找到此结点!\n");}实验八:判断线性表长度#include <stdio.h>#include <stdlib.h>#include <malloc.h>学号1060315014032 陈世龙班级计科15-1实验名称线性表return j; /*j为求得的单链表长度*/}void main(){LinkList l;Node *p;init_linklist(&l);printf("请输入链表数据,以$结束!\n");CreateFromTail(l);p = l->next;while(p!=NULL){printf("%c\n",p->data);p=p->next;}printf("该单链表的长度为%d\n",ListLength(l)); }实验九:线性表结点插入操作#include <stdio.h>#include <stdlib.h>#include <malloc.h>#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0typedef char ElemType;typedef struct Node /*结点类型定义*/{ElemType data;struct Node * next;}Node, *LinkList; /* LinkList为结构指针类型*/延安大学计算机学院实验报告附页学号1060315014032 陈世龙班级计科15-1实验名称线性表{LinkList l;Node *p;int flag=0;int i;char c;init_linklist(&l);printf("请输入链表数据,以$结束!\n");CreateFromTail(l);p = l->next;while(p!=NULL){printf("%c\n",p->data);p=p->next;}printf("请输入插入的位置和元素:\n");scanf("%d,%c",&i,&c);flag=InsList(l, i, c);if(flag)printf("插入操作成功!\n");elseprintf("插入操作失败!\n");p = l->next;while(p!=NULL){printf("%c\n",p->data);p=p->next;}}实验十:两个单链表合并为一个单链表#include <stdio.h>学号1060315014032 陈世龙班级计科15-1实验名称线性表printf("%d ",p->data);p=p->next;}}实验十一:循环链表合并操作#include <stdio.h>#include <stdlib.h>#include <malloc.h>#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0typedef int ElemType;typedef struct Node /*结点类型定义*/{ElemType data;struct Node * next;}Node, *LinkList; /* LinkList为结构指针类型*/ void create_clinklist(LinkList l)/*创建循环链表*/ {int num;Node *p;l->data=-1;l->next=l;printf("请输入循环链表的元素(以-1结束):\n"); scanf("%d",&num);学号1060315014032 陈世龙班级计科15-1实验名称线性表}实验十二:#include <stdio.h>#include <stdlib.h>#include <malloc.h>#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0typedef char ElemType;typedef struct DNode{ElemType data;struct DNode *prior, *next;}DNode, *DoubleList;void CreateList(DoubleList L){DNode *r, *s;char c;int flag =1;L->next=L;L->prior=L;r=L;while(flag){c=getchar();if(c!='$'){s=(DNode*)malloc(sizeof(DNode)); s->data=c;r->next=s;学号1060315014032 陈世龙班级计科15-1实验名称线性表{printf("%c\n",p->data);p=p->next;}printf("请输入插入位置和元素值:\n");scanf("%d,%c",&i,&e);DlinkIns(l,i,e);printf("插入后的链表为:\n");p = l->next;while(p!=l){printf("%c\n",p->data);p=p->next;}}5、出现的问题及解决方法:对线性表的知识与应用认识不够透彻,不能够足够去灵活运用栈和队列处理问题,通过再次对课本的了解、认识,完成了本次实验,学到了新的知识与操作。