赞
踩
1.熟练掌握顺序表基本操作的C语言实现。
2.掌握顺序表的应用,逐步培养解决实际问题的能力。
3.培养学生程序设计能力,要求编写的程序结构清楚和正确易读,符合软件工程的规范。
4.培养学生利用顺序表解决实际问题的能力。
1.设计并验证以下算法:设顺序表L中的数据元素为整数且非递增有序,删除其值相同的多余元素,即顺序表L中相同的元素只保留一个,并逆置删除后的顺序表L。
(1)根据键盘输入数据建立顺序表L。
(2)输出顺序表L、删除值相同多余元素后的顺序表L\逆置的顺序表L。
(3)假设顺序表L的长度为n,要求以O(n)的时间复杂度完成对值相同多余元素的删除
2.给定一个含n(n≥1)个整数的数组,请设计实现一个在时间上尽可能高效的算法,找出数组中未出现的最小正整数。
1.
- #include<stdio.h>
- #include<stdlib.h>
- #define LIST_INIT_SIZE 100
- #define LISTINCREMENT 10
- #define OK 1
- #define ERROR -1
-
- typedef int Elemtype;
- typedef int Status;
- typedef struct{
- Elemtype *elem; //存储空间基址
- int length; //当前长度
- int listsize; //当前分配的存储容量(顺序表最大长度)
- }SqList;
-
- //初始化顺序表
- Status InitList(SqList &L){
- L.elem = (Elemtype * )malloc(LIST_INIT_SIZE *sizeof(Elemtype));
- if(!L.elem){
- exit(ERROR); // 异常处理
- }
- L.length = 0;
- L.listsize = LIST_INIT_SIZE;
- return OK;
- }
-
- //把元素放入顺序表
- Status WriteList(SqList &L){
- printf("请输入需要创建顺序表的长度:");
- scanf("%d", &L.length);
- printf("请输入%d个需要放入的元素:\n", L.length);
- if(L.length<=0){
- return ERROR; // 异常处理
- }
- for(int i=0;i<L.length;i++){
- scanf("%d", &L.elem[i]); // 将元素放入顺序表
- }
- printf("顺序表L为:"); // 检验顺序表
- for(int i=0;i<L.length;i++){
- printf("%d ",L.elem[i]);
- }
- printf("\n");
- return OK;
- }
-
- // 顺序表删除相同的元素
- Status DeleteList(SqList &L) {
- int i,j;
- if(L.length<=0){
- return ERROR;
- }
- for(i=0,j=1;j<L.length;j++){
- if(L.elem[i]!=L.elem[j]){
- L.elem[++i]=L.elem[j];
- }
- }
- L.length=i+1;
- printf("删除值相同多余元素后的顺序表L为:");
- for(int i=0;i<L.length;i++){
- printf("%d ",L.elem[i]);
- }
- printf("\n");
- return OK;
- }
-
- //顺序表的逆置
- Status InversionList(SqList &L) {
- int t;
- int length=L.length;
- for(int i=0;i<=length/2;i++){
- t=L.elem[i];
- L.elem[i]=L.elem[length-1];
- L.elem[length-1]=t;
- length--;
- }
- printf("逆置的顺序表L为:");
- for(int i=0;i<L.length;i++){
- printf("%d ",L.elem[i]);
- }
- printf("\n");
- return OK;
- }
-
-
- int main(){
- SqList L;
- int i;
- i=InitList(L);
- i=WriteList(L);
- i=DeleteList(L);
- i=InversionList(L);
- if(i==1){
- printf("完成!");
- }
- else{
- printf("失败!");
- }
- }

2.
- #include<stdio.h>
- #include<stdlib.h>
- #define LIST_INIT_SIZE 100
- #define LISTINCREMENT 10
- #define OK 1
- #define ERROR -1
-
- typedef int Elemtype;
- typedef int Status;
- typedef struct{
- Elemtype *elem; //存储空间基址
- int length; //当前长度
- int listsize; //当前分配的存储容量(顺序表最大长度)
- }SqList;
-
- //初始化顺序表
- Status InitList(SqList &L){
- L.elem = (Elemtype * )malloc(LIST_INIT_SIZE *sizeof(Elemtype));
- if(!L.elem){
- exit(ERROR);
- }
- L.length = 0;
- L.listsize = LIST_INIT_SIZE;
- return OK;
- }
-
- //把元素放入顺序表
- Status WriteList(SqList &L){
- printf("请输入需要创建顺序表的长度:");
- scanf("%d", &L.length);
- printf("请输入%d个需要放入的元素:\n", L.length);
- if(L.length<=0){
- return ERROR;
- }
- for(int i=0;i<L.length;i++){
- scanf("%d", &L.elem[i]);
- }
- printf("顺序表L为:");
- for(int i=0;i<L.length;i++){
- printf("%d ",L.elem[i]);
- }
- printf("\n");
- return OK;
- }
-
- int FindMissMin(SqList &L)
- {
- int min = 1;
- int i;
- int a[LIST_INIT_SIZE];
- for(i=0;i<L.length;i++){
- if(L.elem[i]>=1){
- a[L.elem[i]]=1;
- }
- }
- for(i=1;i<LIST_INIT_SIZE;i++){
- if(a[i]==0){
- return i;
- }
- }
- }
-
- int main(){
- SqList L;
- int i;
- InitList(L);
- WriteList(L);
- i=FindMissMin(L);
- printf("未出现的最小整数为%d",i);

1.
2.
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。