主题:急需线性表的程序
480125146
[专家分:0] 发布于 2006-05-27 19:15:00
想找关于线性表的或栈的或队列
拜托给我找一个啊
拜托啊
急需!!!!!!!!!!!!!!!![em7]
回复列表 (共4个回复)
板凳
wwsq5573 [专家分:250] 发布于 2006-06-03 16:53:00
下面是自己编的一些线性表的操作,希望对你有所帮助
#include<stdio.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef struct list{ /* 定义结构体 */
int *data;
int length; /* 当前长度 */
int listsize; /* 当前分配的存储容量以(sizeof(int)为单位 */
}sqlist;
void initlist(sqlist *l) /* 初始化表 */
{l->data=(int *)malloc(LIST_INIT_SIZE*sizeof(int));
if(!l->data) exit();
l->length=0;
l->listsize=LIST_INIT_SIZE;
}
listdelete(sqlist *l,int i) /* 删除表中第i个元素 */
{int j;
if(i<=0||i>(l->length))return; /* 无效的i值 */
for(j=i;j<l->length;j++)
*(l->data+j-1)=*(l->data+j);
l->length--;
}
listinsert(sqlist *l,int i,int e) /* 将元素e插入表l的第i位 */
{int j;
if(i<1||i>l->length+1)
return 0; /* 无效i值 */
if(l->length==l->listsize) /*若表空间已满,则追加一个内存*/
{ l->data=(int *)realloc(l->data,(l->listsize+1)*sizeof(int));
if(!l->data)exit();
l->listsize++;
}
for(j=l->length;j>=i;j--)
*(l->data+j)=*(l->data+j-1); /* 第i+1位的元素往后移 */
*(l->data+i-1)=e;
l->length++;
}
int getelem(sqlist *l,int i) /* 取表中的第i个元素然后赋值给e */
{return *(l->data+i-1);}
merglist(sqlist la,sqlist lb,sqlist *lc) /* 求表la和表lb的并集 */
{int i,j,k,la_len,lb_len;int ai,bj;
i=j=1;k=0;
la_len=la.length;lb_len=lb.length;
while((i<=la_len)&&(j<=lb_len))
{ai=getelem(&la,i);bj=getelem(&lb,j);
if(ai<=bj){k++;listinsert(lc,k,ai);++i;}
else {k++;listinsert(lc,k,bj);++j;}}
while(i<=la_len){ai=getelem(&la,i++);k++;listinsert(lc,k,ai);}
while(j<=lb_len){bj=getelem(&lb,j++);k++;listinsert(lc,k,bj);}
}
/*删除表中相同的元素*/
delsameelem(sqlist *l)
{int i;
for(i=1;i<=l->length;i++)
{if(i+1<=l->length)
{if(*(l->data+i)==*(l->data+i+1)) /*判断第i个元素和第i+1个元素是否相同,如果相同就删除第i+1个元素*/
listdelete(l,i+1);
}
}
if(i==l->length+1);
{printf("After delete the same elem is:");
paintlist(l);
}
}
paintlist(sqlist *l) /* 打印出表中的元素 */
{
int i;
printf("{");
if(l->length==0)
printf("empty list!\n");
else
for(i=0;i<l->length;i++)
printf("%d ",getelem(l,i+1));
printf("}\n");
}
3 楼
中国台湾 [专家分:2140] 发布于 2006-06-07 13:06:00
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#define LISTINCREMENT 10
#define OVERFLOW 1
#define OK 0
#define ERROR -1
typedef int ElemType ;
typedef int status;
typedef struct
{
ElemType *elem;
int length;
int listsize;
} SqList;
status InitList (SqList *L) /*定义一个线形表*/
{
int length1;
printf("请确定顺序的长度");
scanf("%d",&length1);
L->listsize=length1;
L->elem=(ElemType*)malloc(length1*sizeof(ElemType));
if(!L)
{
printf("out of space");
exit(OVERFLOW);
}
L->length=0;
return OK;
}
status Listinsert (SqList*L,int i, ElemType e) /*在i元素的前面插入元素e*/
{
ElemType *p,*q,*newbase;
if(i<1||i>L->length+1)
{
return ERROR;
}
if(L->length>L->listsize)
{
newbase=(ElemType*)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(ElemType));
if (newbase==NULL)
{
printf("out of space");
return (OVERFLOW);
}
L->listsize+=LISTINCREMENT;
}
p=&( L->elem[i-1]);
for (q=&(L->elem[L->length-1]) ;q>=p;q--)
{
*(q+1)=*q;
}
L->elem[i-1]=e;
L->length++;
return OK;
}
status DeleteList (SqList *L,int i) /*删除i个元素*/
{
ElemType *q ,*p;
if(i<1||i>L->length)
{
return ERROR;
}
q = &(L->elem[i-1]);
p = L->elem+L->length-1;
for (q++; q <= p; q++)
{
*(q-1) = *q;
}
L->length--;
return OK;
}
int main(void)
{
SqList L;
ElemType i,e;
if(InitList(&L)==OVERFLOW)
{
printf("ERROR");
}
else
{
printf("\n************************************************\n");
{
printf("请输入线性表的元素:");
for(i=0;i<L.listsize;i++)
{
scanf("%d",&(L.elem[i]));
L.length++;
}
}
}
for(i=0;i<L.listsize;i++)
{
printf("%4d",L.elem[i]);
}
printf("\n************************************************\n");
printf("请输入要插入的位置和元素:") ;
scanf("%d%d",&i,&e);
Listinsert (&L,i,e);
for(i=0;i<L.length;i++)
{
printf("%4d",L.elem[i]);
}
printf("\n************************************************\n");
printf("请输入要删除的元素的位置:") ;
scanf("%d",&i);
DeleteList (&L, i ) ;
for(i=0;i<L.length;i++)
{
printf("%4d",L.elem[i]);
}
printf("\n************************************************\n");
printf("请按任意键退出\n");
system("pause");
return 0;
}
4 楼
480125146 [专家分:0] 发布于 2006-06-07 17:38:00
谢谢各位的帮助
有没有的可以运行出结果的啊
感激不尽
我来回复