| 这个不知道哪里出错了,,哎郁闷啊,,实在弄不出来,,,没有时间了,明天两门考试呢。。。。。。。 悲哀。。。。。。。。。。。。。 无聊的电气专业 高手帮忙改改吧!!! #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; } |