急求 用C++编写顺序表程序 急~~~~
要求:(1)编写算法实现顺序表中元素的逆置。要求按用户输入的数据建立一个顺序表。在逆置的过程中使用最少的辅助存储单元。测试要求:在空表、长度为奇数和偶数的情况下测试程序运...
要求:(1)编写算法实现顺序表中元素的逆置。要求按用户输入的数据建立一个顺序表。在逆置的过程中使用最少的辅助存储单元。测试要求:在空表、长度为奇数和偶数的情况下测试程序运行情况。
(2)己知顺序表中的元素非递减有序排列,编写算法删除顺序表中值相同的多余的元素。测试要求:在空表、有1组相同元素、有2组连续相同元素、有2组以上不连续相同元素的情况下测试程序运行情况。
(3)编写算法,在非递减有序的顺序表中,插入一个给定的元素,插入后该顺序表仍然递增有序。测试要求:在空表、表头、表尾、表中间插入及位置非法的情况下测试程序运行情况。
(4)有两个顺序表A(有m个元素)和B(有n个元素),其元素均按从小到大的升序排列。编写算法,将这两个顺序表合并成一个顺序表C,要求C也是按从小到大的升序排列。测试要求:在A与B均空、A与B一个为空、A与B均不空且等长、A与B均不空且不等长的情况下测试程序运行情况。 展开
(2)己知顺序表中的元素非递减有序排列,编写算法删除顺序表中值相同的多余的元素。测试要求:在空表、有1组相同元素、有2组连续相同元素、有2组以上不连续相同元素的情况下测试程序运行情况。
(3)编写算法,在非递减有序的顺序表中,插入一个给定的元素,插入后该顺序表仍然递增有序。测试要求:在空表、表头、表尾、表中间插入及位置非法的情况下测试程序运行情况。
(4)有两个顺序表A(有m个元素)和B(有n个元素),其元素均按从小到大的升序排列。编写算法,将这两个顺序表合并成一个顺序表C,要求C也是按从小到大的升序排列。测试要求:在A与B均空、A与B一个为空、A与B均不空且等长、A与B均不空且不等长的情况下测试程序运行情况。 展开
1个回答
2013-11-08
展开全部
以前学数据结构的时候写的小程序,可能有些地方不太符合要求但基本能实现,你在改改。#include<stdio.h>#include<stdlib.h>#include<iostream.h>#define ok 1#define ERROR 0#define OVERFLOW -2#define LIST_INIT_SIZE 100#define LISTINCREMENT 10typedef int Status;typedef struct{ int *elem; int length; int listsize;}SqList; Status InitList_Sq(SqList &L,int &c);Status ListInsert_Sq(SqList &L,inte,int i);Status ListDelete_Sq(SqList &L,inti,int &z); void main(){ SqList f; intj=0; inti; inte; intc=0; intn=0; intz; printf("请输入链表长度:\n"); scanf("%d",&c); printf("请输入链表的值:\n"); InitList_Sq(f,c); printf("建立的链表为:\n"); for(j=1;j<c+1;j++) { printf("%d\t",f.elem[j-1]); } printf("\n");printf("请输入要插入的数值:\n"); scanf("%d",&e); k:printf("请输入要插入的位置:\n");scanf("%d",&i); if(i>c||i<=0){ printf("输入有误,请重新输入!"); printf("\n");goto k;} ListInsert_Sq(f,e,i); printf("\n");z:printf("请输入要删除的位置: "); scanf("%d",&n); if(n>c+1||n<=0){ printf("输入有误,请重新输入!"); printf("\n");goto z;} ListDelete_Sq(f,n, z); printf("\n");} Status InitList_Sq(SqList &L,int &c){ intd=0; L.elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int)); if(!L.elem)exit(OVERFLOW); L.length=0; L.listsize=LIST_INIT_SIZE; for(d=0;d<c;d++) { printf("第%d个结点的值为:",d+1); scanf("%d",&L.elem[d]); L.length++; } return ok; } Status ListInsert_Sq(SqList &L,inte,int i){ int*q; intj; int*p; int*newbase; if(i<1||i>L.length+1) return ERROR; if(L.length>=L.listsize) { newbase=(int*)realloc(L.elem, (L.listsize+LISTINCREMENT)*sizeof(int)); if(!newbase)exit(OVERFLOW); L.elem=newbase; L.listsize+=LISTINCREMENT; } q=&(L.elem[i-1]); for(p=&(L.elem[L.length-1]);p>=q;--p) { *(p+1)=*p; } *q=e; ++L.length; printf("插入后的链表为:\n"); for(j=1;j<L.length+1;j++) { printf("%d\t",L.elem[j-1]); } return ok; } Status ListDelete_Sq(SqList &L,inti,int &z){ int j; int*p; int*q; if(i<1||i>L.length+1) return ERROR; p=&(L.elem[i-1]); z=*p; q=L.elem+L.length-1; for(++p;p<=q;++p)*(p-1)=*p; --L.length; printf("要删除的元素为: "); printf("%d\t",z); printf("\n"); printf("剩余链表为:\n"); for(j=1;j<L.length+1;j++) { printf("%d\t",L.elem[j-1]); } return ok; }
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询