数据结构——单链表,多项式链表

来源:互联网 发布:通用网络加速 编辑:程序博客网 时间:2024/06/05 02:48

今天把静态链表总结了一下;说实在话,花了我不少时间,本来学的时候(好像对这种结构一窍不通;)这种结构适合没有只指针的编程语言,可自己学的是c/c++好像vb没有指针,下个月,看一下vb吧……

总结一下;

#include<stdio.h>
#include<malloc.h>

typedef struct
{
char data;
int cursor;
}Node,Static[100];

void inilit(Static L,int *p)
{
int k;
for(k=0;k<99;k++)
{
   L[k].cursor=k+1;
}
L[k].cursor=0;
*p=1;
}
int getnode(Static L,int *av)
{
int k;
k=*av;
*av=L[*av].cursor;
return k;
}
void freenode(Static L,int k,int *av)
{
L[k].cursor=*av;
*av=k;
}
void insert(Static L,int m,char n,int *av)
{
int i,j,k;
j=getnode(L,av);
k=L[0].cursor;
for(i=1;i<m-1;i++)
{
   k=L[k].cursor;
}
L[j].data=n;
L[j].cursor=L[k].cursor;
L[k].cursor=j;
}
void del(Static L,int m,int *av)
{
int i,j,k;
k=L[0].cursor;
for(i=1;i<m-1;i++)
{
   k=L[k].cursor;
}
j=L[k].cursor;
L[k].cursor=L[j].cursor;
  
freenode(L,j,av);

}
void output(Static L)
{
int k;
k=L[0].cursor;
while(L[k].cursor!=0)
{
   printf("%c ",L[k].data);
   k=L[k].cursor;
}
   printf("%c /n",L[k].data);
}

void main()
{
Static L;
int a,m,b;
int i,j;
char c,n;
int *p;
p=(int*)malloc(sizeof(int));
inilit(L,p);
printf("请输入元素的个数:");
scanf("%d",&a);
for(i=0;i<a;i++)
{
   j=getnode(L,p);
   printf("请输入第%d个元素:",i+1);
   fflush(stdin);
   scanf("%c",&c);
   L[j].data=c;
}
L[j].cursor=0;
output(L);

printf("请输入要插入的元素的位置和元素:/n");
fflush(stdin);
scanf("%d,%c",&m,&n);
insert(L,m,n,p);
output(L);

printf("请输入要删除的元素的位置:/n");
fflush(stdin);
scanf("%d",&b);
del(L,b,p);
output(L);
}

今天继续,结束线性表…………

多项式……

#include<stdio.h>
#include<malloc.h>

typedef struct poly
{
int x;
int y;
struct poly *next;
}poly,*polylist;

void create(polylist head)
{
poly *p,*q;
p=head;
int i,j;
   scanf("%d,%d",&i,&j);
while(i!=0)
{
  
   q=(poly*)malloc(sizeof(poly));
   q->x=i;
   q->y=j;
   p->next=q;
   p=q;
   scanf("%d,%d",&i,&j);
}
p->next=NULL;
}

void add(polylist L1,polylist L2)
{
poly *p,*q,*real,*temp;
int sum;
p=L1->next;
q=L2->next;
real=L1;

while(p!=NULL&&q!=NULL)
{
   if(p->y<q->y)
   {
    real->next=p;
    real=p;
    p=p->next;
   }
   else
   {
    if(p->y==q->y)
    {
     sum=p->x+q->x;
     if(sum!=0)
     {
      p->x=sum;
      real->next=p;
      real=p;
      p=p->next;
      temp=q;
      q=q->next;
      free(temp);
     }
     else
     {
      temp=p;
      p=p->next;
      free(temp);
      temp=q;
      q=q->next;
      free(temp);
     }
    }
    else
    {
     real->next=q;
     real=q;
     q=q->next;
    }
   }
}
if(p!=NULL)
   real->next=p;

else
   real->next=q;

}

void main()
{
polylist L1,L2;
poly *p;
L1=(poly*)malloc(sizeof(poly));
L2=(poly*)malloc(sizeof(poly));

printf("请输入L1的元素(以(0,0)结束):/n");
create(L1);
printf("/n输出数组:/n");
p=L1->next;
while(p!=NULL)
{
   printf("%d   %d/n",p->x,p->y);
   p=p->next;
}


printf("请输入L2的元素(以(0,0)结束):/n");
create(L2);
printf("/n输出数组:/n");
p=L2->next;
while(p!=NULL)
{
   printf("%d   %d/n",p->x,p->y);
   p=p->next;
}

printf("/n两个数组相加为:/n");
add(L1,L2);
p=L1->next;
while(p!=NULL)
{
   printf("%d   %d/n",p->x,p->y);
   p=p->next;
}
}

结束了……结束了线性表了……

数据结构不是想象的那么简单……

今天的两种结构,虽说都不难,可操作起来可就没那么简单了……

多项式的相加,考虑的情况太多if-else了一大队,自己都搞迷了…………

加油……