下学期就要开始学面向对象的程序设计了,也就是相当于上上学期的程序设计的 c++ 版本,所以还是要认真的对待一下这个,毕竟还是要自己好好的提升一下自己的程序能力啊。不能再继续摆了。。。开整
这个题目给我看了半天才看懂,好家伙,我本来以为说的是要让我实现里面要求的功能,结果看完之后发现实际上要求的是得把他题目附加的两个条件满足了,也就是说虽然题目中没有明确写出他的那些操作指令的具体实现过程,但是我们默认是已经实现了的,同时我们需要在附加条件中实现所需要的另外两个要求 (单项链表、堆栈、队列三选二),然后最重要的是要体现代码重用的思想,也就是我们需要尽量使用之前所写出来的那些指令,通过改造来实现后两种的基础指令合集。
1 2 3 4 5 6 7 8 9 10
| 1) 至少实现堆栈、队列、单向链表中的两个类型(包括数据结构类型名、基本操作集合); 2) 实现语言不限; 对于要实现的每个类型,你也可以使用 C 的 struct 定义其结构,全局函数定义其操作; 3) 要体现“模块”划分、模块与源程序文件的对应关系; 应在提交的解答中进行说明,不要让老师猜测!!! 4) 要体现“代码重用”的思想(即使用/调用 已有的数据结构、函数等)。 重用的一种表现之举例: 就像你调用C语言例程库中的 fopen、fclose、fprintf等函数那样,你实际在重用这些函数,来实现你所需要的功能。 5) 应给出必要的说明(注释),便于老师理解批阅。
|
就是上面的这段话。。。。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| #include<iostream> using namespace std; struct Dlist { struct Dlist * prev; struct Dlist * next; int appValue; };
struct Dlist * newDlist(int n);
struct Dlist * addFirst(struct Dlist * ptrList, int n);
struct Dlist * append(struct Dlist * ptrList, int n);
struct Dlist * removeHead(struct Dlist * ptrList);
struct Dlist * removeTail(struct Dlist * ptrList);
int sizeOfDlist(struct Dlist * ptrList);
void destroyDlist(struct Dlist * ptrList);
|
这是给出的代码片段,现在就开始实现吧。。
首先开始实现最简单的单项链表:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
| typedef struct linklist { int data; struct linklist *next; };
struct linklist *newlist(int n) { linklist *head = NULL; head = (linklist *)malloc(sizeof(linklist)); head->data = n; head->next = NULL; return head; }
struct linklist *addhead(struct linklist *hdlist, int n) { linklist *p = NULL; p = (linklist *)malloc(sizeof(linklist)); p->next = hdlist; p->data = n; return hdlist; }
struct linklist *addend(struct linklist *last, int n) { linklist *p = NULL; p = (linklist *)malloc(sizeof(linklist)); last->next = p; p->data = n; last = last->next; return last; };
struct linklist *rmhead(struct linklist *hdlist) { if(hdlist->next==NULL&&hdlist==NULL){ return NULL; } linklist *p = NULL; p = (linklist *)malloc(sizeof(linklist)); p= hdlist->next; free(hdlist); return p; }
struct linklist *rmend(struct linklist *hdlist) { linklist *p = NULL; p = (linklist *)malloc(sizeof(linklist)); linklist *q = NULL; q = (linklist *)malloc(sizeof(linklist)); p = hdlist; if(p->next!=NULL){ p = p->next; } if(q->next!=p){ q = q->next; } if (q== NULL&&p== NULL) { return NULL; } q->next = NULL; free(p); return q; }
int sumlist(struct linklist *hdlist) { int sum=1; linklist *p = NULL; p = (linklist *)malloc(sizeof(linklist)); p = hdlist; if(p->next!=NULL){ sum += 1; p = p->next; } return sum; }
int dylist(struct linklist *hdlist) { if(hdlist==NULL){ return 0; } linklist *p = NULL; p = (linklist *)malloc(sizeof(linklist)); p = hdlist->next; free(hdlist); dylist(p); }
|
感觉这个就是基本上把功能什么的东西全都自己实现了一遍嘛。。。。虽然说好多东西自己写的时候还是忘掉了,然后就边写边查,姑且算是把东西都写出来了。话说也不是很难嘛
然后就就是开始写堆栈了,按道理来说,我连单项链表都写出来了,这个应该是更简单啊,结果写了半天还有点小问题一直在报错。。。怪,最后到截止日期都没改好。。不管了,姑且就这样子交上去吧。。。下面是代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| #define MAXSIZE 50 typedef int ElemType; typedef struct SqStack{ int data[MAXSIZE]; int top; };
struct SqStack *zhaninit(SqStack *S){ S->top = -1; }
bool StackEmpty(SqStack S){ if(S.top == -1){ return true; }else{ return false; } }
struct Push(SqStack *S, ElemType e){ if(S->top == MAXSIZE-1){ return ERROR; } S->top++; S->data[S->top] = e; return OK; }
Status Pop(SqStack *S, ElemType *e){ if(S->top == -1){ return ERROR; } *e = S->data[S->top]; S->top--; return OK; }
Status GetTop(SqStack S, ElemType *e){ if(S->top == -1){ return ERROR; } *e = S->data[S->top]; return OK; }
|