A. c语言建立顺序表
#include"iostream.h"
#include"malloc.h"
#include"stdio.h"
#define MAX_LIST_SIZE 100
typedef int elemtype;
typedef struct Node
{
elemtype *data;
int length;
int listsize;
}SqList;
void InitList(SqList &L)
{
L=(SqList *)malloc(MAX_LIST_SIZE*sizeof(SqList));
L->length=0;
L->listsize=MAX_LIST_SIZE;
}
void Insert(SqList &L,int i,elemtype x)
{
int k;
for(k=L->length;k>=i;k--)
*L->data[k+1]=*L->data[k];
*L->data[k]=x;
}
void Print(SqList L)
{
for(int i=0;i<L->length;i++)
cout<<*L->data[i]<<" ";
}
void main()
{
elemtype e;
int n;
SqList *L;
InitList(L);
cout<<"输入你要插入的元素:"<<endl;
cin>>e;
cout<<"输入你要插入的位置:"<<endl;
cin>>n;
Insert(L,n,e);
Print(L);
}
这里就简要的写了下第一小问,时间问题,没有调试,你自己看看
其实网上这方面的资料很多的,你可以网络一下
B. 用C语言建立一个顺序表,输入n个数并输出。程序编译没错,但运行不了,求指教。程序如下:
楼主你好
修改如下:
#include<stdio.h>
#include<malloc.h>
#define MaxSize 40 //顺序表存储空间的初始分配量 --> (1)可以将MaxSize调大点儿
typedef struct
{
int *p;
int data[MaxSize];
int length;
int listsize;
}SeqList;
void InitList(SeqList &x) //定义顺序表的初始化函数
//--> (2)这里应该是SeqList &x 需要址传递 值传递是不会改变实参值的
{
x.p=(int*)malloc(MaxSize*sizeof(int));
if(!x.p) printf("存储分配失败!");
x.length=0;
x.listsize=MaxSize;
}
int main()
{
SeqList L;
InitList(L);
int i,n,k;
printf("请输入顺序表的长度n:");
scanf("%d",&n);
if(n<=0)
{
printf("数据错误!\n");
return 0;
}
if(n>MaxSize)
{
L.p=(int*)realloc(L.p,n*sizeof(int));
if(!L.p)printf("存储空间扩展失败!\n");
L.listsize=n;
}
printf("请输入数据:");
for(i=0;i<=n-1;i++)
{
scanf("%d",&k);
L.data[i]=k;
L.length++;
}
printf("线性表为:");
for(i=0;i<=n-1;i++)
printf("%d ",L.data[i]);
printf("\n");
return 1;
}
请看注释(1)(2)
希望能帮助你哈^_^
C. C语言:1.建立含n个数据元素的顺序表并输出该表中各元素的值及顺序表的长度。 紧急求 速度
1、
#include<iostream>
#include<cstdio>
#include<cstdlib>
usingnamespacestd;
typedefstructLnode{
int*data;
intlength;
intmaxsize;
structLnode*next;
}List;
voidcreatList(List&L,intn)
{
intcount=0;
L.data=(int*)malloc(sizeof(int)*n);
if(!L.data)
cout<<"申请空间失败";
cout<<"inputthenumbers";
for(inti=0;i<n;i++)
{
cin>>L.data[i];
count++;
}
L.length=count;
L.maxsize=n;
}
voidInsert(List&L,inti,intdata)
{
intj;
if(i>=L.maxsize)
cout<<"插入位置不对";
if(L.length+1>=L.maxsize)
{
L.data=(int*)realloc(L.data,L.maxsize+sizeof(int)*L.maxsize);
L.maxsize+=L.maxsize;
}
for(j=L.length-1;j>=i-1;j--)
{
L.data[j+1]=L.data[j];
}
L.data[j+1]=data;
L.length+=1;
}
voidprint(ListL)
{
cout<<"outputtheList:";
for(inti=0;i<L.length;i++)
{
cout<<L.data[i]<<"";
}
cout<<endl;
}
voidmain()
{
intm,number,locate;
ListL;
cout<<"pleaseinputthelengthofList:";
cin>>m;
creatList(L,m);
print(L);
cout<<":";
cin>>locate>>number;
Insert(L,locate,number);
print(L);
system("pause");
}
D. c语言实现顺序表
--顺序表.h
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define TRUE 1
#define FLASE 0
typedef int Elemtype;
typedef int Status;
/*接口定义
Status InitList_Sq(SqList &L,int size,int inc);
void CreateList_Sq(SqList &L);
void print_Sq(SqList &L);
int Search_Sq(SqList L, Elemtype e);
Status DestroyList_Sq(SqList &L);
Status ClearList_Sq(SqList &L);
Status ListEmpty_Sq(SqList L);
int ListLength_Sq(SqList L);
Status GetElem_Sq(SqList L, int i, Elemtype &e);
Status PutElem_Sq(SqList &L, int i, Elemtype e);
Status Append_Sq(SqList &L, Elemtype e);
Status DeleteLast_Sq(SqList &L, Elemtype &e);
*/
--------------------
#include "顺序表.h"
//定义顺序表类型
typedef struct {
Elemtype *elem;
int length;
int listsize;
int increment;
}SqList;
//初始化顺序表
Status InitList_Sq(SqList &L,int size,int inc) {
L.elem = (Elemtype *)malloc(size * sizeof(Elemtype));
L.length = 0;
L.listsize = size;
L.increment = inc;
return TRUE;
}
//创建顺序表
Status CreateList_Sq(SqList &L) {
int i;
printf("请输入你要创建的顺序表元素个数:\n");
scanf_s("%d", &L.length);
if (L.length >= L.listsize) {
L.elem = (Elemtype *)realloc(L.elem, (L.listsize + L.increment) * sizeof(Elemtype));
}
if (!L.elem) {
return FLASE;
}
printf("请输入你要创建的顺序表:\n");
for (i = 0; i<L.length; i++) {
scanf_s("%d", &L.elem[i]);
}
}
//遍历顺序表
void print_Sq(SqList &L) {
int i;
for (i = 0; i<L.length; i++) {
printf("%4d", L.elem[i]);
}
}
//查找元素的位置
int Search_Sq(SqList L, Elemtype e) {
int i = 0;
while (L.elem[i] != e&&i<L.length) {
i++;
}
if (i>L.length)
return -1;
else
return i + 1;//因为C语言是从下标为0开始的,当i=0时表示第一个元素
}
//销毁顺序表
Status DestroyList_Sq(SqList &L) {
if (L.elem == NULL)
return -1;
else
free(L.elem);
printf("\n销毁成功\n");
return TRUE;
}
//清空顺序表
Status ClearList_Sq(SqList &L) {
if (L.elem == NULL)
exit(0);
int i;
Elemtype *p_elem = L.elem;
for (i = 0; i<L.length; i++) {
*L.elem = NULL;
L.elem++;
}
L.elem = p_elem;
}
//判断顺序表是否为空
Status ListEmpty_Sq(SqList L) {
int i;
Elemtype* p_elem = L.elem;
for (i = 0; i<L.length; i++) {
if (*L.elem != 0) {
L.elem = p_elem;
return FLASE;
}
L.elem++;
}
return TRUE;
}
//求顺序表的长度
int ListLength_Sq(SqList L) {
return L.length;
}
//用e返回顺序表L中第i个元素的值
Status GetElem_Sq(SqList L, int i, Elemtype &e) {
int j;
Elemtype* p_elem = L.elem;
if (i<1 || i>L.length)
return FLASE;
for (j = 1; j <= i; j++)
L.elem++;
e = *L.elem;
L.elem = p_elem;
return TRUE;
}
//将顺序表L中第i个元素赋值为e
Status PutElem_Sq(SqList &L, int i, Elemtype e) {
L.elem[i - 1] = e;
return TRUE;
}
//在顺序表L表尾添加元素e
Status Append_Sq(SqList &L, Elemtype e) {
L.elem[L.length] = e;
L.length++;
L.listsize += L.increment;
return TRUE;
}
//删除顺序表L表尾元素
Status DeleteLast_Sq(SqList &L, Elemtype &e) {
e = L.elem[L.length - 1];
L.length--;
return TRUE;
}
********************************************主函数.c*************************************************
#include <stdio.h>
#include <stdlib.h>
#include "顺序表.h"
#include "源代码.h"
//--------------------主函数入口--------------------
int main(){
SqList L;
int size, inc;
int e;
int a;
int length;
int i;
int temp;
int j=10;
int ee;
printf("\n--------------------顺序表初始化------------------\n");
printf("请输入顺序表的长度size以及扩容量:\n");
scanf_s("%d %d", &size, &inc);
InitList_Sq(L, size, inc);
CreateList_Sq(L);
printf("\n--------------------判断是否为空------------------\n");
if(ListEmpty_Sq(L)){
printf("该顺序表为空\n");
}
else
printf("该顺序表不为空\n");
printf("\n--------------------遍历顺序表--------------------\n");
printf("此时顺序表为:\n");
print_Sq(L);
printf("\n--------------------查找元素----------------------\n");
printf("\n请输入要查找的元素:\n");
scanf_s("%d",&e);
a = Search_Sq(L, e);
printf("%d为第%d位:\n",e,a);
printf("\n--------------------输出长度----------------------\n");
length = ListLength_Sq(L);
printf("顺序表的长度为%d\n",length);
printf("\n----------将顺序表L中第i个元素赋值为temp----------\n");
printf("请输入第i个元素的i值和temp值:\n");
scanf_s("%d %d",&i,&temp);
PutElem_Sq(L, i, temp);
printf("\n此时顺序表为:\n");
print_Sq(L);
printf("\n---------------在顺序表表尾添加元素---------------\n");
Append_Sq(L, j);
printf("\n此时顺序表为:\n");
print_Sq(L);
printf("\n---------------在顺序表表尾删除元素---------------\n");
DeleteLast_Sq(L, ee);
printf("\n被删除的元素为%d\n",ee);
printf("此时顺序表为:\n");
print_Sq(L);
printf("\n-------------------清空顺序表---------------------\n");
ClearList_Sq(L);
if(ListEmpty_Sq(L)){
printf("\n清空成功\n");
}
printf("\n------------------销毁顺序表----------------------\n");
DestroyList_Sq(L);
getchar();
getchar();
return 0;
}
E. C语言顺序表的基本操作
#include<stdio.h>
#include<stdlib.h>
typedefintDataType;//定义数据数据类型
typedefstruct{
DataType*data;//data指向数据区的首个数据
intlength;//数据长度
}SqList;
voidSort(SqList*L){
inti,j,k;
DataTypetmp;
for(i=0;i<L->length-1;++i){
k=i;
for(j=i+1;j<L->length;++j)
if(L->data[k]>L->data[j])
k=j;
if(k!=i){
tmp=L->data[k];
L->data[k]=L->data[i];
L->data[i]=tmp;
}
}
}
SqList*CreateList(DataTypea[],intn){
inti;
SqList*L;
L=(SqList*)malloc(sizeof(SqList));
L->data=(DataType*)malloc(n*sizeof(DataType));
L->length=n;
for(i=0;i<n;++i)L->data[i]=a[i];
Sort(L);
returnL;
}
intInsertList(SqList*L,DataTypex){
inti,j;
for(i=0;i<L->length;i++){
if(x<=L->data[i]){
for(j=L->length;j>=i;j--)
L->data[j+1]=L->data[j];//结点后移
L->data[i]=x;
L->length++;
return1;
}
}
L->data[L->length++]=x;
return1;
}
intRemoveListElem(SqList*L,DataTyped){
inti,j;
for(i=0;i<L->length;++i){
if(L->data[i]==d){
for(j=i;j<L->length-1;++j)
L->data[j]=L->data[j+1];
L->length--;
return1;
}
}
return0;
}
SqList*AndList(SqList*A,SqList*B){/*A∩B*/
inti,j,k=0;
intlen=(A->length>B->length)?B->length:A->length;
SqList*C=(SqList*)malloc(sizeof(SqList));
C->length=len;
C->data=(DataType*)malloc(len*sizeof(DataType));
for(i=0;i<A->length;++i){
for(j=0;j<B->length;++j){
if(A->data[i]==B->data[j]){
C->data[k++]=A->data[i];
break;
}
}
}
C->length=k;
returnC;
}
SqList*OrList(SqList*A,SqList*B){/*A∪B*/
inti,j,flag;
DataTypee;
SqList*C=(SqList*)malloc(sizeof(SqList));
C->length=A->length+B->length;
C->data=(DataType*)malloc(C->length*sizeof(DataType));
for(i=0;i<A->length;++i)C->data[i]=A->data[i];
for(i=0;i<B->length;++i){
e=B->data[i];
flag=1;
for(j=0;j<C->length;++j){
if(e==C->data[j]){
flag=0;
break;
}
}
if(flag)InsertList(C,e);
}
returnC;
}
voidPrintList(SqList*L){
inti;
for(i=0;i<L->length;++i)
printf("%d",L->data[i]);
printf(" ");
}
voidFreeList(SqList*L){
free(L->data);
free(L);
}
voidmain(){
DataTypex;
DataTypearra[]={36,24,31,5,90,65,70,39,37};
DataTypearrb[]={9,8,43,51,37,89,33,46,29,80,56};
intalen=sizeof(arra)/sizeof(arra[0]);
intblen=sizeof(arrb)/sizeof(arrb[0]);
SqList*A=CreateList(arra,alen);
printf("A线性表为:");
PrintList(A);
SqList*B=CreateList(arrb,blen);
printf("B线性表为:");
PrintList(B);
SqList*C=AndList(A,B);
SqList*D=OrList(A,B);
printf("C=A∩B:");
PrintList(C);
printf("D=A∪B:");
PrintList(D);
printf("在D表中插入数据:");
scanf("%d",&x);
InsertList(D,x);
printf("D表插入x后:");
PrintList(D);
printf("删除D表中数据:");
scanf("%d",&x);
RemoveListElem(D,x);
printf("删除x后的D表为:");
PrintList(D);
FreeList(A);
FreeList(B);
FreeList(C);
FreeList(D);
}
F. 是C语言中建立顺序表的程序
C语言中建立顺序表的操作顺序如下:
1.清空顺序表:其实清空只不过将元素长度置0,让后面插入数据函数的长度从0开始,其实并不是真正清空,之前的数据元素在内存中还存在,只不过可以被新元素覆盖而已。
2.判断顺序表是否为空
G. 在C语言顺序表中打印出各项的的和
#include <stdio.h>
#include <malloc.h>
#define maxsize 1024
typedef int datatype;
typedef struct{
datatype data[maxsize];
int last;
}sequenlist;
void displayLine(void){//画一条线
printf("--------------------------------------\n");
}
int insert(sequenlist *L,datatype x,int i){//插入元素x
int j;
if((maxsize-1)==L->last){
printf("overflow");
return 0;
}
else if((i<0)||(i>L->last)){
printf("error,please input the right 'i'\n");
return 0;
}
else{
for(j=L->last;j>=i-1;j--)
L->data[j+1]=L->data[j];
L->data[i-1]=x;
L->last++;
}
return (1);
}
int dellist(sequenlist *L,int i){//删除第i个元素
if((i<0)||(i>L->last)){
printf("error,please input the right 'i'\n");
return 0;
}
else{
for(int j=i;j<=L->last;j++)
L->data[j-1]=L->data[j];
L->last--;
return (1);
}
}
void creatlist(sequenlist *L){
int n,i;
int tmp;
displayLine();//画一条线
printf("请输入数据个数:\n");
scanf("%d",&n);
for(i=0;i<n;i++){
printf("data[%d]=",i);
fflush(stdin);//清除键盘缓冲区
scanf("%d",&tmp);
L->data[i]=tmp;
}
L->last=n-1;
displayLine();//画一条线
}
void printout(sequenlist *L){//打印顺序表
int i;
displayLine();//画一条线
for(i=0;i<=L->last;i++){
printf("data[%d]=",i);
printf("%d\n",L->data[i]);
}
displayLine();//画一条线
}
int add(sequenlist *L){
int i,sum=0;
for(i=0;i<=L->last;i++)
sum+=data[i];
return sum;
}
int main(void){
sequenlist *L;
char cmd;
int i,x;
L=(sequenlist *)malloc(sizeof(sequenlist));
creatlist(L);
printout(L);
do{
displayLine();//画一条线
printf("请输入你的选择:\n");
printf("a,A为求和\n");
printf("i,I为插入\n");
printf("d,D为删除\n");
printf("q,Q为退出\n");
displayLine();//画一条线
do{
fflush(stdin);
scanf("%c",&cmd);
}while((cmd!='d')&&(cmd!='D')&&(cmd!='q')&&(cmd!='Q')&&(cmd!='I')&&(cmd!='i')&&(cmd!='A')&&(cmd!='a'));
switch(cmd){
case'a':case'A':
int sum=add(L);
printf("求和的结果是:%d\n",sum);
break;
case'i':case'I':
printf("请输入你要插入的数据:");
fflush(stdin);
scanf("%d",&x);
printf("请输入你要插入的位置:");
scanf("%d",&i);
insert(L,x,i);
printout(L);
break;
case'd':case'D':
printf("请输入你要删除的数据位置:");
fflush(stdin);
scanf("%d",&i);
dellist(L,i);
printout(L);
break;
}
}while((cmd!='q')||(cmd!='Q'));
return 0;
}
H. 用C语言编写一个有关顺序表的程序代码
#include<stdio.h>
#include<stdlib.h>
#define Size 50
//定义顺序表结构体类型
typedef struct Table{
int*head;//顺序表头指针,为整型
int length;//顺序表中元素个数
int size; //顺序表的长度
}Table;
//创建顺序表
Table CreateTable(){
Table T;
if(!(T.head=(int*)malloc(Size*sizeof(int)))){
printf("内存分配错误!\n");
exit(0);
}
T.size=Size;
T.length=0;
return T;
}
//增加
void Insert(Table T,int set,int values)//set为插入的位置,values为值
{
//首先判断插入位置是否正确
if(set<0||set>T.length){
printf("插入位置不正确!\n");
reutrn;
}
//判断是否有足够的内存空间存储增加的数
if(T.length==T.size){
if(!(T.head=(int*)realloc(T.head,(T.size+10)*sizeof(int)))){
printf("内存分配错误!\n");
exit(0);
}
T.size+=10;
}
//插入数据
for(int i=s.length;i>set;i--)
T.head[i]=T.head[i-1];
T.head[set]=values;
T.length++;
}
//删除
void Delete(Tabel T,int set)
{
if(set<0||set>=T.length)
{
printf("删除数的位置不争确,删除失败!\n");
return;
}
//输出数据
for(int i=set;i<s.length;i++)
T.head[i]=T.head[i+1];
T.length--;
}
//查找
int Search(Tabel T,int value)
{
for(int i=0;i<T.length;i++)
if(T.head[i]==value)
return i;
return -1;
}
I. 数据结构 用C语言实现顺序表的建立及遍历
#include<stdio.h>
#include<malloc.h>
typedefstructnlist
{
int*np;
intlen;//已使用地址个数
intmaxlen;//最大地址个数
}NLT;
NLT*createlist();//创建顺序表
intaddtolist(NLT*nlist);//向顺序表插入元素
voidpList(NLT*nlist);//遍历顺序表
intmain()
{
inti;
NLT*nlist=createlist();
if(nlist)
{
for(i=0;i<nlist->maxlen;i++)
addtolist(nlist);
pList(nlist);
}
return0;
}
voidpList(NLT*nlist)//遍历打印,空格分割,最后一个数后面没有空格
{
inti;
for(i=0;i<nlist->len-1;i++)
printf("%d",nlist->np[i]);
printf("%d",nlist->np[nlist->len-1]);
}
NLT*createlist()
{
NLT*nlist=NULL;
nlist=(NLT*)malloc(sizeof(NLT));
scanf("%d",&nlist->maxlen);
nlist->np=(int*)malloc(sizeof(int)*nlist->maxlen);
if(!nlist||!nlist->np)
{
printf("内存申请失败!
");
returnNULL;
}
nlist->len=0;
returnnlist;
}
intaddtolist(NLT*nlist)
{
if(nlist->len<nlist->maxlen)//如果存储空间未满,保存元素,保存成功返回1失败返回0
{
scanf("%d",&nlist->np[nlist->len]);
nlist->len++;
return1;
}
else//这里可以写当存储满的之后,空间扩容,本题用不到所以我不写了
return0;
}
J. c语言顺序表的创建程序
/*
*程序不足之处:1,main函数不应该为 void main
* 2,创建空的顺序表函数中 SqList L;//定义顺序表L L是局部变量,
函数结束即销毁,应该用指针代替
* 3,SqList CreateList(SqList L) //创建顺序表(非空)函数中:
scanf("%d",&L.elem); L里面的elem本来就是地址,
没必要再加&符号,且每次输入都一直放在首地址,
没达到程序所要表达的意思
* 4,void print(SqList L) //输出当前顺序表 函数中:
printf("%-3d",L.elem); 和上面是一样的道理
* 5,main函数中没有将申请的内存释放
*现将程序稍作修改如下,望采纳
*/
#include<stdio.h>
#include<stdlib.h>
#define LIST_INIT_SIZE 100
#define Icreament 20
typedef int ElemType; //用户自定义数据元素类型
typedef struct
{
ElemType *elem; //顺序表的基地址
int length; //顺序表的当前长度
int listsize; //预设空间容量
}SqList; //线性表的顺序存储结构
SqList* InitList() //创建空的顺序表
{
SqList* L = (SqList*)malloc(sizeof(SqList));//定义顺序表L
if(!L)
{
printf("空间划分失败,程序退出
");
return NULL;
}
L->elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L->elem)
{
printf("空间划分失败,程序退出
");
return NULL;
}
L->length=0;
L->listsize=LIST_INIT_SIZE;
return L;
}
int CreateList(SqList* L) //创建顺序表(非空)
{
int number; //顺序表中元素的个数
int i; //循环变量
printf("请输入顺序表中元素的个数:");
scanf("%d",&number);
if(number > LIST_INIT_SIZE)//一定要判断输入的个数是否大于顺序表的最大长度
{
printf("输入个数大于顺序表的长度
");
return 0;
}
for(i=0;i<number;i++)
{
printf("输入第%d个数: ",i+1);
scanf("%d",L->elem+i);//L->elem+i:每次的输入都保存在顺序表元素中的下一个地址,而不是一直放在元素的首地址
}//给顺序表中每个数据元素赋值
L->length=number; //当前顺序表的长度
return 1;
}
void print(SqList* L) //输出当前顺序表
{
int i;
for(i=0;i<L->length;i++)
{
printf("%-3d",*(L->elem + i));//L->elem+i:和输入是一个道理
}
printf("
");
}
int main()
{
SqList* L = InitList();//申请一个指向顺序表的指针,并对其初始化
if(!L)//判断申请是否成功
{
printf("初始化线性表失败
");
return 1;
}
if(!CreateList(L))//判断创建顺序表是否成功
{
printf("创建顺序表失败
");
return 1;
}
print(L);//打印顺序表
free(L->elem);//释放申请的顺序表元素的内存
free(L);//释放申请的顺序表内存
return 0;
}
运行效果如图: