c语言顺序表程序编写,高手快帮我啊!

2.有序的一组整数,1-2-3-4-6,设计顺序表并实现以下操作:
A.初始化线性表
B.添加上述一组数
C.删除第四个数据元素
D.显示B,C操作后的结果

写出源程序,并做适当的解析,谢谢了。结构体算法啥的看死了,什么是初始化啊,快疯了。。

同志们就别在百度文库新浪资源里找了,,,这些要我能看明白我自己也会找,现在需要你们原创的写一写啊。。。。

这是我写的代码希望对你有帮助:

/* Note:Your choice is C IDE */

#include "stdio.h"

#define maxsize 100

typedef struct

{ int data[maxsize];

  int length;

  }sequetiallist;

 main()

{

 int x,y,i=0,k;

 sequetiallist ll;

 printf("please create the list!\n");

 scanf("%d",&y);

 while(y!=1000)

 {   

  ll.data[i]=y;

  i++;

  scanf("%d",&y);

  }

 ll.length=i;

 printf("length is %d\n",ll.length);

 printf("the sqlist is:");

 for(k=0;k<ll.length;k++)

  printf("%d ",ll.data[k]);

  printf("\n");

 printf("deleting operation!\n");

 printf("input i:");

 scanf("%d",&i);

 sqlistdelete(&ll,i-1);

 printf("\n");

 }

 sqlistdelete(sequetiallist *l,int i)

 {

  int j;

  if(i<1||i>l->length)printf("input i error!\n");

  else{l->length--;

   for(j=i;j<l->length;j++)

    l->data[j]=l->data[j+1];

  }

  printf("the sqlist is:");

  for(j=0;j<l->length;j++)

   printf("%d ",l->data[j]);

  printf("\n");

}

结果如图:

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-04-07
#include<stdio.h>
#include<malloc.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef struct{
int * elem;
int length;
int listsize;
}SqList;
//SqList sq;
void InitList_Sq(SqList *sq) //初始化列表
{
sq->elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));
sq->length=0;
sq->listsize=LIST_INIT_SIZE;
printf("---申请空间成功---!\n");
}
void GetElem(SqList *sq,int i)//获取第i位置元素的值
{
int *p;
p=&(sq->elem[i-1]);
printf("%d",*p);
printf("\n");
}
int ListInsert_Sq(SqList *sq,int i,int a)//在i位置之前插入a
{
int *p,*q;
if(i<=0||i>sq->length+1)
{
printf("---位置不合法---!\n");
return 0;
}
if(sq->length>=sq->listsize)
{
int* newbase=(int *)realloc(sq->elem,(sq->listsize+LISTINCREMENT)*sizeof(int));
if(!newbase)
{
printf("申请空间溢出\n");
return 0;
}
sq->elem=newbase;
sq->listsize+=LISTINCREMENT;
}
p=&(sq->elem[i-1]);//p指向第i位置的元素
q=&(sq->elem[sq->length-1]);//q指向最后一个元素
for(;q>=p;--q) *(q+1)=*q;
*p=a;
++sq->length;
return 1;
}
int ListDelete_Sq(SqList *sq,int i) //删除i位置上的值
{
int *p,*q;
if(i<1||i>sq->length) return 0;
p=&(sq->elem[i-1]);//p指向第i位置的元素
q=sq->elem+sq->length-1;//q指向最后一个元素
for(++p;p<=q;++p)
{
*(p-1)=*p;
}
--sq->length;
return 1;
}
void visit(SqList *sq)//输出数据
{
int i=1;
for(;i<=sq->length;i++)
{
int *p;
p=&sq->elem[i-1];
printf("%d",*p);
printf(" ");
}
}
void main()
{
int i=1,a=0,boo=1,number=0;
SqList s,*sq;
sq=&s;
InitList_Sq(sq);
printf("初始化空表\n");
printf("输入数据个数\n");
scanf("%d",&number);
printf("输入%d个数据",number);
printf("\n");
for(;i<=number;i++)
{
scanf("%d",&a);
if(boo=ListInsert_Sq(sq,i,a))
{
printf("---插入成功!---\n");
}
else
{
printf("---插入不成功,重新插入---!\n");
i=i-1;
}
}
printf("输出所有元素\n");
visit(sq);
printf("\n");
printf("输出删除的位置:");
scanf("%d",&a);
if(boo=ListDelete_Sq(sq,a))
{
printf("---数据删除成功!---\n");
}else
{
printf("---没有删除成功---\n");
}
printf("输出所有元素\n");
visit(sq);
printf("\n");
printf("输出要显示数据的位置:");
scanf("%d",&a);
printf("输出%d位置数值\n",a);
if(a<0||a>sq->length)
{
printf("---输出位置的数据不存在---\n");
}
else
{
GetElem(sq,a);
}

}
第2个回答  2011-04-07
#include<stdio.h>
#include<malloc.h> //头文件包含命令

#define List_init_size 100 //符号常量的定义
#define Listincrement 100
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2

typedef int Elemtype;//抽象数据类型elemtype具体化为int类型
typedef int Status;
typedef struct { //定义结构体
Elemtype *elem;
int length;
int listsize;
}Sqlist;
Status Initlist_sq(Sqlist *l) //函数(初始化顺序表)初始化失败则返回-2
{
l->elem =(Elemtype*)malloc(sizeof(Elemtype));
if(!l->elem ) return(OVERFLOW);
l->length =0;
l->listsize =List_init_size;
return OK;
}

Status Creatlist_sq(Sqlist *l,int n) //初始化顺序表为含有n个元素的顺序表
{
int i;
printf("Input %d numbers:\n",n);
for(i=0;i<n;i++)
scanf("%d",&(l->elem [i]));
l->length =n;
return OK;
}

void Outputlist_sq(Sqlist *l) //函数(输出顺序表的元素)
{
int i;
for(i=0;i<l->length ;i++)
{
printf("%5d",l->elem [i]);
if((i+1)%5==0)
printf("\n");
}
printf("\n");

}
void Destroylist_sq(Sqlist*l) //销毁顺序表l
{
free(l->elem );

}

Status Insertlist_sq(Sqlist*l,int i,Elemtype e) //在顺序表的第i个位置前插入元素e
{
int j;
Elemtype *p;
if(i>l->length )
{
printf("输入数据不合法!");
return (OVERFLOW);
}

if(l->length>=l->listsize )
{
Elemtype *p;
p=(Elemtype*)realloc(l->elem ,(List_init_size+Listincrement)*sizeof(Elemtype));
if(p==0)
{
return(OVERFLOW);
}
l->elem =p;
l->listsize =+Listincrement;

}
p=&(l->elem[i-1]);
for(j=l->length +1;j>=i;j--)
l->elem [j]=l->elem [j-1];
*p=e;
l->length ++;
return OK;
}

Elemtype Deletelist_sq(Sqlist*l,int i)//函数(删除)用e返回删除的元素
{
int j;
Elemtype e;
e=l->elem [i-1];
for(j=i-1;j<l->length-1 ;j++)
l->elem [j]=l->elem [j+1];
l->elem [l->length -1]=0;
l->length --;
return e;
}

这个参考吧!

参考资料:http://zhidao.baidu.com/question/195601518.html

第3个回答  2011-04-07
简单的顺序表
#include <stdio.h>
#define MAX 10

typedef struct //这就是定义一个简单的顺序表
{
int data[MAX];
int len;
}Seq;

void main()
{
Seq A;//定义一个变量A,类型为一个顺序表结构
int i;

//初始化
A.len=0;

//插入值
A.data[A.len]=1;
A.len++;
A.data[A.len]=2;
A.len++;
A.data[A.len]=3;
A.len++;
A.data[A.len]=4;
A.len++;
A.data[A.len]=6;
A.len++;

//输出结果
for(i=0;i<A.len;i++)
printf("%d ",A.data[i]);
printf("\n");

//删除第四个元素,实际就是将第四个后面的元素前移一个,然后总长度len减一
for(i=3;i<A.len-1;i++)
A.data[i]=A.data[i+1];
A.len=A.len-1;
//输出结果
for(i=0;i<A.len;i++)
printf("%d ",A.data[i]);
printf("\n");

}
相似回答