数据结构——单链表,多项式链表
来源:互联网 发布:通用网络加速 编辑:程序博客网 时间: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了一大队,自己都搞迷了…………
加油……
- 数据结构——单链表,多项式链表
- 数据结构 —— 链表实现多项式加减乘
- [数据结构] 链表实现多项式
- 《数据结构》--和多项式链表
- 数据结构——多项式相加
- 重学数据结构001——链表基本操作与一元多项式相加
- 数据结构:多项式链表的操作
- 数据结构之链表-多项式相加
- 多项式链表-算法设计与数据结构
- 数据结构——一元多项式相乘
- 数据结构实践——链表:多项式求和
- 数据结构实践——多项式求和
- 数据结构与算法——多项式加法
- 链表应用——二元多项式
- 数据结构 第二章 单链表应用举例——一元多项式求和(待补充)
- 数据结构 循环链表、双向链表、一元多项式
- 多项式的累加------(数据结构)链表的应用
- 数据结构实验 链表存储多项式进行加法乘法运算
- 数据结构——单链表
- 数据结构——单链表
- Ant安装并调试gwt程序流程
- 数据结构——双向链表,循环链表
- 使用eclipse引入gwt例程
- 数据结构——单链表,多项式链表
- 数据结构——顺序栈,双向顺序栈,链栈
- 学习嵌入式系统的10点建议(转载)
- 数据结构——顺序串
- VC简单消息截获
- C#生成图片缩略图、水印及上传的几个通用方法
- 关于装Win 7的宽带连接找不到设备原因哪位
- C#中为水晶报表动态动态设置数据源 收藏
- 『一个大四毕业生的自白』