|
初生襁褓狮
|
发表于:
2009-06-19 20:08
|
显示全部
短消息
资料
郁闷的静态链表
静态链表----解决不了 2009-06-18 22:19 这个不知道哪里出错了,,哎郁闷啊,,实在弄不出来,,,没有时间了,明天两门考试呢。。。。。。。
悲哀。。。。。。。。。。。。。
无聊的电气专业
高手帮忙改改吧!!!
#include "stdio.h" #include "stdlib.h" #define MAX_SIZE 100 ///////////////////////////////////////////////// //定义顶台链表结构 ///////////////////////////////////////////////// typedef struct { int data; int cur; }StaicList;
////////////////////////////////////////////////// //初始化一个静态链表,实际上是备用链表 ////////////////////////////////////////////////// StaicList* InitList_sl() {
StaicList *s1=new StaicList[MAX_SIZE]; for (int i=0;i<MAX_SIZE-1;++i) { s1.cur=i+1; }
s1[MAX_SIZE-1].cur=0; return s1;
}
//////////////////////////////////////////////////// //给链表非配空间 //////////////////////////////////////////////////// int MallocList_sl(StaicList* s2) { //StaicList *s2=new StaicList[MAX_SIZE]; /*非空就返回下标*/ int i=s2[0].cur; if (s2[0].cur) { s2[0].cur=s2.cur; }
return i; }
////////////////////////////////////////////////////// //释放链表 ////////////////////////////////////////////////////// void FreeList_sl(StaicList* s3,int k) { //StaicList *s3=new StaicList[MAX_SIZE]; /*将下标为k的元素回收到备用链表中*/ s3[k].cur=s3[0].cur; s3[0].cur=k;
} ////////////////////////////////////////////////////// //比较函数 ////////////////////////////////////////////////////// StaicList* DeffList_sl() { //StaicList *s4=new StaicList[MAX_SIZE];
StaicList* g=InitList_sl(); //初始化备用空间 int s=MallocList_sl(g); //生成头结点 int r=s; //r指向当前最后的一个结点 int a,b; printf("请输入A和B的元素个数:\n"); scanf("%d,%d",&a,&b);
for (int j=0;j<=a;++j) { int i=MallocList_sl(g); printf("请输入A的元素:\n"); scanf("%d",&g->data); g[r].cur=i; //插入到了当前备用链表的最后 r=i; i++;//更新尾结点
}
g[r].cur=0; //尾结点为空 int b1; for (j=0;j<=b;++j) { printf("请输入B的元素:\n"); scanf("%d",&b1); int p=s; int k=g[s].cur;
//循环查表// while (k!=g[0].cur&&g[k].data!=b1) { p=k; k=g[k].cur; }
if (k==g[r].cur) { //如果不存在这个元素那么就插入到后面// int i=MallocList_sl(g);
g.data=b; g.cur=g[r].cur; g[r].cur=i;
} else { //如果存在就删除// g[p].cur=g[k].cur; FreeList_sl(g,k); //如果删除的刚好是为结点,那么就的更新下为结点// if (r==k) r=p; }
} return g; }
//////////////////////////////////////////////////////// //获取链表的长度 //////////////////////////////////////////////////////// int GetListLength(StaicList* ss) { //StaicList *sl=new StaicList[MAX_SIZE]; int cnt=1; int k=0;
while(ss[k].cur!=NULL) { k=ss[k].cur; cnt++; } return cnt; }
int main() {
StaicList* g1=DeffList_sl(); if (!g1) { printf("操作失败"); exit(0); } else { int n=GetListLength(g1); for (int i=0;i<=n;i++) { printf("%d---->\n",g1.data); } }
return 0;
}
| 用户系统信息:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 551; .NET CLR 2.0.50727)
|