【100分】数据结构——使用C语言(线性表)

设计一个有序顺序表,要求:
(1)有序顺序表的操作集合有如下操作:初始化、求数据元素个数、插入、删除和取数据元素。有序顺序表和顺序表的主要区别是有序顺序表中的数据元素按数据元素值非递减有序。
(2)设计一个测试主函数实际运行验证所设计有序顺序表的正确性。
*(3)设计合并函数ListMerge(L1, L2, L3),功能是把有序顺序表L1和L2中的数据元素合并到L3中,要求L3中的数据元素依然保持有序。并设计一个主函数验证该合并函数的正确性。

ps:我刚开始学这个,请尽量把代码写得简单易懂一些,最好有注释。如果好的话可以追加悬赏分。

//c++的头文件,我是用c++编写的,有一些该成了C但是有些输入输出没有改
//希望楼主不要建议哦,费了很久的时间写的啊!
#include<iostream>//c++的头文件
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<math.h>
#define error 0
#define OVERFLOW 1
#define OK 1
using namespace std;//c++的一个指令
typedef struct
{
int *elem; //存储空间基址
int length; //当前长度
int listsize;//当前分配的存储容量
// (以sizeof(ElemType)为单位)
//int *next;
}sqlist;

void initList(sqlist &La)
{//构造一个空线性表L
La.elem=(int *) malloc(100 *sizeof(int));//分配空间
if (!La.elem) exit(-2);//未分配则 跳出;
La.length=0;
La.listsize= 100 ;
}

int Listinsert_sq(sqlist &L,int i,int e) // listinsert_sq;插入一个元素
{int *newbase;int *p,*q;
if (i<1 || i>L.length+1) return error;
if (L.length>=L.listsize)//空间不足追加
{newbase=(int*) realloc(L.elem,(L.listsize+10) *sizeof(int));
if (!newbase)
exit(-2);
L.elem=newbase; L.listsize+=10 ;
return 0;
}
q=&(L.elem[i-1]);//指针指向确定插入的位子
for(p=&(L.elem[L.length-1]);p>=q;--p)
*(p+1)=*p;//指针后移
*q=e; //实现元素的插入
++L.length;
return 0;
}
int ListDelete_sq(sqlist &L,int i)//删除i位子的元素
{int *p,*q;
if((i<1)||(i>L.length)) return 0;
p=&(L.elem[i-1]);
//e=*p;
cout<<"被删除的值是:"<<*p<<endl;
for(q=&(L.elem[L.length-1]);p<q;p++)
*p =*(p+1);//指针前移,覆盖前面的存储的数据
--L.length;
return 1;
}
int Getelem(sqlist &L)//输入表的数据
{ int n;
cout<<"输入数列的个数:"<<endl;
cin>>n;
printf("按大小顺序输入n个数:");//cout<<"按大小顺序输入n个数:";
if(n<0||n>L.listsize ) return 0;
for(int i=0;i<n;i++)//循环输入元素
{ cin>>L.elem [i];
L.length ++;//表长度
}
cout<<"这数列的长度:"<<L.length <<endl;
return 1;
}
int Poplist(sqlist &L)//输出函数
{
for(int j=0;j<L.length ;j++)
cout<<L.elem[j]<<" ";
printf("\n");//cout<<endl;
return 0;
}
void ListMerge(sqlist La,sqlist Lb, sqlist &Lc)//合并函数,
{ int *pa,*pb,*pa_list ,*pb_list,*pc;
pa=La.elem;pb=Lb.elem;//用pa和pb指向表头
Lc.length=La.length+Lb.length;
Lc.listsize=Lc.length;
Lc.elem=(int *)malloc(Lc.listsize*sizeof(int ));//合理分配Lc的空间
if(!Lc.elem) exit(-2);
pa_list=&(La.elem[La.length-1]);pb_list=&(Lb.elem[Lb.length-1]);//用pa-list和pb_list指向表未
pc=Lc.elem;
while(pa<=pa_list&&pb<=pb_list)//合并算法
{ if(*pa>=*pb){ *pc++=*pb++;*pc++=*pa++;}

//if(*pa=*pb){ *pc++=*pa++;*pc++=*pb++; }

else {*pc++=*pa++;*pc++=*pb++;}
}
while(pa<=pa_list) *pc++=*pa++;//插入剩余的元素;
while(pb<=pb_list) *pc++=*pb++;
}
int main()
{ sqlist La,Lb,Lc;int i,e;
initList(La);
Getelem(La);
initList(Lb);
Getelem(Lb);
ListMerge(La,Lb,Lc);
Poplist(Lc);
printf("input munber 要删除的位子i \n:");
scanf("%d",&i);// cin>>i;
ListDelete_sq(La,i);
Poplist(La);//我这里是用表La做例子。也可用Lb。。。
printf("输出要插入的位子和元素:\n");
scanf("%d%d",&i,&e);//cin>>i>>e;
Listinsert_sq(Lb,i,e);
Poplist(Lb);//我这里是用表Lb做例子。也可用La。。。
return 0;
}
终于全搞定了,还有些不足,希望对楼主有用!
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-11-01
写起来有点费时间,还有没有数据类型怎么写,写了也用不了
推荐一本书《数据结构》——严蔚敏、吴伟民写的
有视频 自己搜索

【100分】数据结构——使用C语言(线性表)
void initList(sqlist &La){\/\/构造一个空线性表L La.elem=(int *) malloc(100 *sizeof(int));\/\/分配空间 if (!La.elem) exit(-2);\/\/未分配则 跳出;La.length=0;La.listsize= 100 ;} int Listinsert_sq(sqlist &L,int i,int e) \/\/ listinsert_sq;插入一个元素 {int *...

数据结构——线性表(一)
线性表的数据存储结构有两种:顺序存储和链式存储。顺序存储将数据存储在连续的内存空间中,而链式存储则在不同内存空间中存储数据,并通过指针链接。接下来,我们使用C语言实现线性表的顺序存储(简称顺序表)。首先引入基本的宏定义和头文件,然后定义一个顺序表结构体。实现初始化、销毁、清空、求长度、...

c语言数据结构线性表求解
include <stdio.h>#include <stdlib.h>#define MAXSIZE 100 \/*线性表的最大长度*\/typedef int ElemType;\/\/描述线性表typedef struct { ElemType data[MAXSIZE]; int length; \/*当前表的长度*\/}SeqList; \/\/初始化线性表SeqList *init_SeqList() {SeqList *L = (SeqList *)malloc(sizeof(S...

数据结构c语言版一道题求解
,element[n - 1]存放线性表中的元素 *\/}; typedef struct SeqList *PSeqList;PSeqList createNullList_seq(int m ) {\/* 创建新的顺序表 *\/ PSeqList palist= (PSeqList)malloc(sizeof(struct SeqList)); if (palist!=NULL){ palist->element= (DataType*)malloc(sizeo...

数据结构(C语言版)设有线性表LA(3,5,8,110)和LB(2,6,8,9,11,15,20...
define list_init_size 100 define listincrement 10 typedef struct { int *elem;int length;int listsize;} sqlist;int initsqlist (sqlist *l)\/\/初始化 { l->elem=(int *)malloc(list_init_size*sizeof(int));if(!l->elem)exit(0);l->length=0;l->listsize=list_init_size;return...

数据结构笔记(四)——线性表
前面说过,数据结构的类型大方向上来说分为 线性结构 和 非线性结构 ,下面要说的线性表就是线性结构的一种。 (复习一下,前面说过的线性结构有:线性表、栈、队列、字符串、数组和广义表) 上一行是课本上的原话,但是感觉这个在逻辑上有一些不清楚的地方,先忘掉上一行的东西吧,看完下面的...

线性表的基本操作c语言实现
2_1.h ifndef _2_1_H define _2_1_H typedef void SeqList;typedef void SeqListNode;\/\/创建线性表 SeqList * SeqList_Create(int capacity);\/\/销毁线性表 void SeqList_DesTroy(SeqList * list);void SeqList_Clear(SeqList* list);int SeqList_Length(SeqList* list);int SeqList_...

C语言数据结构问题,我已经在线性表中插入了一个元素,为什么表的长度还是...
\/\/求线性表的长度 int SqlListLength(SeqList L){ return L.length;} \/\/顺序表的前插操作 void SeqListInsert(SeqList *L,int i,int x){ if(L->length == MAXSIZE)\/\/表满 { printf("表已满,无法进行插入操作!\\n");exit(0);} if((i < 1) || (i > L->length + 1))\/\/...

数据结构:使用C++语言描述目录
首先,让我们从第一章的绪论开始。本章将详细介绍数据结构的基本概念,包括数据抽象与抽象数据类型,面向对象方法在数据结构设计中的应用,以及C++程序设计的基本原则。了解这些基础知识,为后续章节的学习奠定了坚实的基础。第二章将专注于线性表这一核心数据结构。线性表抽象数据类型将帮助我们理解线性数据的...

数据结构-线性表问题(严蔚敏C语言版清华大学出版社)
GetElem( L, i, &e);此时在内存中复制一份 L,i,&e,因此在内存中操作L,i,是不会改变主函数中的值,而e复制的是地址(指针),照样指向主函数中的e,因此,改变*(&e)的内容,照样能改变主函数的e的值 --- 1正确 2你能不能把算法的功能简单的说下,还有函数的各个参数的用途 前面定义...

相似回答