回 帖 发 新 帖 刷新版面

主题:急需线性表的程序

想找关于线性表的或栈的或队列
拜托给我找一个啊 
拜托啊
急需!!!!!!!!!!!!!!!![em7]

回复列表 (共4个回复)

沙发

网上很多

板凳


下面是自己编的一些线性表的操作,希望对你有所帮助

#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 楼

#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 楼

谢谢各位的帮助
有没有的可以运行出结果的啊
感激不尽

我来回复

您尚未登录,请登录后再回复。点此登录或注册