顺序表链表情况总结实验报告.doc
,.实验报告实验目的:学生管理系统(顺序表)实验要求: 1.建表 2.求表长 3.插入 4.查找 5.删除 6.列表 7.退出源程序:#include <stdio.h>#include <string.h>#include<stdlib.h> #define MaxSize 1000typedefstruct char xh40;char xm40;int cj;DataType; /学生的结构 typedef struct DataType dataMaxSize; /定义表的数据类型 int length; /数据元素分别放置在data0到datalength-1当中 SqList; /表的结构 void liebiao(SqList *L) /建立表格 int k,n;char q; printf("请输入,输入学生的个数:n");fflush(stdin); scanf("%d",&n); for(k=0;k<=n-1;k+) printf("请输入学生学号n");scanf("%s",L->datak.xh);printf("请输入学生名字n");scanf("%s",L->datak.xm);printf("请输入学生成绩n");scanf("%d",&L->datak.cj); L->length=n; void qb(SqList *L) /全部输出 int k,w;for(k=0;k<L->length;k+)w=k+1;printf("第%d位学生:",w); printf("%s %s %dn",L->datak.xh,L->datak.xm,L->datak.cj);int cr(SqList *L,DataType *xs,int i) /插入信息 int j; if(L->length=MaxSize) printf("没有!"); return 0; else if(i<0)|(i>L->length) printf("程序溢出,不符合"); return 0; else for(j=L->length-1;j>=i;j-) strcpy(L->dataj+1.xh,L->dataj.xh); strcpy(L->dataj+1.xm,L->dataj.xm); L->dataj+1.cj=L->dataj.cj; strcpy(L->datai.xh,xs->xh); strcpy(L->datai.xm,xs->xm); L->datai.cj=xs->cj; L->length=L->length+1; return 0; int cz(SqList *L) /查找信息 char xh40;char xm40;int cj;int i=0,u; printf(" 1、按学号查询 n"); printf(" 1、按姓名查询 n");printf(" 1、按成绩查询 n"); printf("请选择:");fflush(stdin); scanf("%d",&u); if (u=1) printf("请输入要查找学生的学号:"); scanf("%s",xh); for(i=0;i<L->length;i+) if(strcmp(L->datai.xh,xh)=0) return i; if (u=2) printf("请输入要查找学生的姓名:"); scanf("%s",xm); for(i=0;i<L->length;i+) if(strcmp(L->datai.xm,xm)=0) return i; if (u=3) printf("请输入要查找学生的成绩:"); scanf("%s",cj); for(i=0;i<L->length;i+) if(L->datai.cj,&cj) return i; return -1;/*如果没找到,返回-1 int cz2(SqList *L) /删除查找的函数 char xh40;char xm40;int i=0,h; printf(" 1、按 学 号 删除 n"); printf(" 2、按 姓 名 删除 n"); printf("请选择:");fflush(stdin); scanf("%d",&h); if (h=1) printf("请输入要删除学生的学号:"); scanf("%s",xh); for(i=0;i<L->length;i+) if(strcmp(L->datai.xh,xh)=0) /判断输入和已知学号一样不return i; else if (h=2) printf("请输入要删除学生的姓名:"); scanf("%s",xm); for(i=0;i<L->length;i+) if(strcmp(L->datai.xm,xm)=0) /判断输入姓名和已知姓名一样不 return i; return -1; void sc(SqList *L) /删除函数 int i,j; printf("请先选择您要删除的学生信息的方式:n");scanf("%d",&j); i=cz2(L); if(i=-1) printf("没有查到要删除的学生信息"); return; for(j=i;j<L->length;j+) / 要删除学生以后的学生整体上调一位 L->dataj.cj=L->dataj+1.cj; /就是后一个覆盖了前一个 strcpy(L->dataj.xh,L->dataj+1.xh); strcpy(L->dataj.xm,L->dataj+1.xm); L->length-; printf("该学生信息已被删除!n"); int bc(SqList *L)return (L->length);int main() /主体大函数 int i,k; SqList *L; /定义顺序表的指针 DataType *xs; L=(SqList *)malloc(sizeof(SqList)*MaxSize); char q; ee: rewind(stdin); printf(" 学生管理系统 n"); /函数的各个结构 printf(" n"); printf(" n"); printf(" n"); printf(" 建立表格请输入1 n"); printf(" 求表长 请输入2 n"); printf(" 插入 请输入3 n"); printf(" 查找 请输入4 n"); printf(" 删除请输入5 n"); printf(" 列表请输入6 n"); printf(" 退出请按0 n"); printf(" 请输入"); scanf("%c",&q);if(q=1)rewind(stdin);liebiao(L);goto ee;if(q=2)rewind(stdin);bc(L);printf("共%d个学生n",L->length);goto ee;if(q=3)rewind(stdin); printf(" 插 入 n");printf("tt 请 输 入 要 添 加 的 学 生 信 息: n");xs=(DataType *)malloc(sizeof(DataType); printf("请输入学生学号n");scanf("%s",xs->xh);printf("请输入学生名字n");scanf("%s",xs->xm);printf("请输入学生成绩n");scanf("%d",&xs->cj);printf("请输入要插入的位置:n");rewind(stdin); scanf("%d",&i); cr(L,xs,i); goto ee;if(q=4)rewind(stdin);printf(" 查 找 n");printf(" 查 询 学 生 信 息 n"); i=cz(L); if(i!=-1) printf("%s %s %dn",L->datai.xh,L->datai.xm,L->datai.cj); else printf("信息不存"); goto ee;if(q=5)rewind(stdin);printf(" 删 除 n");printf(" 删 除 学 生 信 息 n"); sc(L);goto ee; if(q=6) rewind(stdin);printf(" 列表 n");qb(L);goto ee; if(q=0) printf("谢谢使用n"); if(!(q=1|q=2|q=3|q=4|q=5|q=5|q=0) goto ee; system ("pause"); return 0; 输入1-6主程序: 建表 n=1 求表长 n=2 插入 n=3 查找 n=4 删除 n=5 列表 n=6退出输入学生个数n, 变量k建表: k=0; k<=n-1; 是 否 输入学号,姓名,成绩 k=k+1 结束输入查找学号n,变量k查找: k=0 n=k 是 否 k=k+1 输出输入插入位置n表长L变量k插入:输入错误 n<=L 是 否 k=0 n=k 是 否 k=k+1strcpy(L->dataj+1.xh,L->dataj.xh); strcpy(L->dataj+1.xm,L->dataj.xm); L->dataj+1.cj=L->dataj.cj 结束输入删除的位置n变量k表长L删除:输入错误 n<=L 是 否 k=0 n=k 否 是 k=k+1strcpy(L->dataj.xh,L->dataj-1.xh); strcpy(L->dataj.xm,L->dataj-1.xm); L->dataj.cj=L->dataj-1.cj 结束 输入表长L变量k列表: k<=L 是 否输出学号,姓名,成绩 k=k+1 结束实验目的:学生管理系统(链表)实验要求:1.建表2.删除3.列表4.退出源程序:#include<stdio.h>#include<string.h>#include<stdlib.h>struct xuesheng char xh7; char xm40; int cj; struct xuesheng *next; ;struct xuesheng *cha_ru(struct xuesheng *x) struct xuesheng *p,*q; int c; do if(x=0) x=(struct xuesheng *)malloc(sizeof(struct xuesheng); printf("input xh:"); scanf("%s",(*x).xh); printf("input xm:"); scanf("%s",(*x).xm); printf("input cj:"); scanf("%d",&(*x).cj); (*x).next=0; else p=x; while(*p).next!=0)p=(*p).next; q=(struct xuesheng *)malloc(sizeof(struct xuesheng); printf("input xh:"); scanf("%s",(*q).xh); printf("input xm:"); scanf("%s",(*q).xm); printf("input cj:"); scanf("%d",&(*q).cj); (*p).next=q; (*q).next=0; printf("ni hai ji xu me? 1/2:"); scanf("%d",&c); while(c=1); return(x); int link_len(struct xuesheng *x) struct xuesheng *p; int l=0; p=x; if(p!=0)do l=l+1; p=p->next; while(p!=0); return(l); struct xuesheng *shan_chu(struct xuesheng *x) struct xuesheng *p,*q,*t; int k,l,i; p=x; q=x; l=link_len(x); printf("input shan chu jie dian xu hao :"); scanf("%d",&k); if(k<=0|k>l)printf("error data!n"); if(k=1) x=p->next; t=p; free(t); if(k>1&&k<=l) for(i=1;i<=k-2;i=i+1)p=p->next; t=p->next; for(i=1;i<=k;i=i+1)q=q->next; p->next=q; free(t); printf("vvvvvvv shan chu wan bi ! vvvvvvvn"); return(x); void lie_biao(struct xuesheng *x) struct xuesheng *p; int l; p=x; if(p=0) printf("gai biao wei kong!n"); else do printf("%20s% 20s%7dn",(*p).xh,(*p).xm,(*p).cj); p=(*p).next; while(p!=0); l=link_len(x); printf(" l=%dn",l); main() struct xuesheng *s_head; int n; s_head=0; do printf("1:cha run"); printf("2:cha zhaon"); printf("3:shan chun"); printf("4:lie biaon"); printf("5:tui chun"); printf("input 1-5:"); scanf("%d",&n); switch(n) case 1: s_head=cha_ru(s_head);break; /* case 2: cha_zhao(s_head);break;*/ case 3: s_head=shan_chu(s_head);break; case 4: lie_biao(s_head);break; while(n=1|n=3|n=4); printf("n"); return 0; 框图: 输入n(1-4)主函数:1.建表 n=1 输入错误4.退出3.列表 n=3 n=22.删除 是 否 是 否 是 否 否 p.next=q q.next=0 p=p.next p->=0输入学号,姓名,成绩建表: 结束 是否继续 否 是 是 否定义表长L,k,i删除: 此表为空 k>0 否k=1 是 是 否输入错误x=p->next;t=p;free(t); L<=k 否 i=1; i<=k-2; 是 是 否 i<=k p=p->next; t=p->next; 否 free(t); q=q->next; p->next=q;=1 i=i+1; i=i+1; 结束总结:顺序表存储位置是相邻连续的,可以随即访问的一种数据结构,一个顺序表在使用前必须指定起长度,一旦分配内存,则在使用中不可以动态的更改。他的优点是访问数据是比较方便,可以随即的访问表中的任何一个数据,缺点是定义的长度不可更改造成存储空间的浪费。链表是通过指针来描述元素关系的一种数据结构,他可以是物理地址不连续的物理空间。不能随即访问链表元素,必须从表头开始,一步一步搜索元素。它的优点是:对于数组,可以动态的改变数据的长度,分配物理空间。建议:在使用中如果一个数组在使用中,查询比较多,而插入,删除数据比较少,数组的长度不变时,选顺序表比较合理。如果插入,删除,长度不定的数组,可以选链表。