ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

代码(前三章)

2020-10-10 22:33:44  阅读:180  来源: 互联网

标签:return int 前三章 代码 List maxsize data Stack


今天花了几个小时才弄出来了,还是有点不熟练,不过万幸的是终于可以自己手写了,哈哈,功夫不负有心人,直接进入正题。

 

顺序存储结构的单链表:

typedef int ElemType;
typedef struct LNode {
ElemType data;
struct LNode *next;
int flag;
}LNode,*List;

List CreateList (ElemType n);
void EnList (List L,ElemType x,int Position);
int DeList(List L,int Position);
void PrintList (List L);

int main ()
{
int n = 5;
List L = CreateList (n);

PrintList(L);
return 0;
}

void PrintList (List L)
{
List p = L;
while(p->flag){
printf("%d ",DeList(p,p->flag));
}
printf("\n");
}
List CreateList (ElemType n)
{
List L = (List)malloc(sizeof(LNode));
L->next = NULL;
L->flag = 0;
ElemType x;
int i;
for(i = 0;i < n;i++){
printf("Please enter a number:");
scanf("%d",&x);
EnList(L,i+1,i+1);
}

return L;
}
void EnList (List L,ElemType x,int Position)
{
if(Position < 1 || Position - 1 > L->flag ){
printf("Illegal Insert!\n");
return;
}

List p = L;
while(Position - 1){
p = p->next;
Position--;
}
List temp = (LNode*)malloc(sizeof(LNode));
temp->data = x;
temp->next = p->next;
p->next = temp;
L->flag++;
printf("L->flag is %d\n",L->flag);
}
int DeList (List L,int Position)
{
List p = L;
if(Position < 1 || Position > L->flag) {
printf("Illegal Delete!\n");
return -1;
}

while (Position -1 ){
p = p->next;
Position--;
}

List temp = p->next;
p->next = temp->next;
int x = temp->data;
L->flag--;
free(temp);
return x;
}

链式存储的单链表:

typedef struct LNode {
int *data;
int length;
int maxsize;
}LNode,*List;

List CreateList (int maxsize);
void EnList (List L,int x,int i );
int DeList (List L,int i);
void PrintList (List L);

int main ()
{
List L;
L = CreateList (4);
PrintList(L);
DeList (L,1);
DeList(L,3);
PrintList (L);

return 0;
}

void PrintList (List L)
{
int i;
for(i = 0;i < L->length;i++){
printf("%d ",L->data[i]);
}

printf("\n");
}

List CreateList (int maxsize)
{
List L = (List)malloc(sizeof(LNode));
L->data = (int*)malloc(sizeof(maxsize));
L->maxsize = maxsize;
L->length = 0;
int i = 0;
int n;
for(i = 0;i < maxsize;i++) {
scanf("%d",&n);
EnList(L,n,i+1);
}

return L;
}

void EnList (List L,int x,int i)
{
if(i < 1 || i -1 > L->length){
printf("Illegal Insert!\n");
return;
}

int j;
for(j = L->length;j > i-1;j--){
L->data[j] = L->data[j--];
}

L->data[i-1] = x;
L->length++;
}

int DeList (List L,int i)
{
List p = L;
if(i < 1 || i > p->length){
printf("Illegal Delete!\n");
return -1;
}

int j;
int x = p->data[i -1];
for(j = i -1;j < L->length;j++){
L->data[j] = L->data[j+1];
}
p->length--;

return x;
}

顺序存储的栈:

typedef struct SNode {
int *data;
int top;
int maxsize;
}SNode,*Stack;

Stack CreateStack (int maxsize);
void Push (Stack S, int x);
int Pop (Stack S);
void PrintS (Stack S);


int main ()
{
Stack S;
S = CreateStack (5);
PrintS(S);
return 0;
}

void PrintS (Stack S)
{
while(S->top + 1) {
printf("%d ",Pop(S));
}

printf("\n");
}
Stack CreateStack (int maxsize)
{
Stack S;
S = (Stack)malloc(sizeof(SNode));
S->data = (int*)malloc(sizeof(int)*maxsize);
S->top = -1;
S->maxsize = maxsize;
int i ;
for(i = 0 ;i <maxsize;i++){
Push(S,i+1);
}

return S;
}

void Push (Stack S, int x)
{
if (S->top == S->maxsize-1) {
printf("the stack is full!\n");
return;
}

S->top++;
S->data[S->top] = x;
}

int Pop (Stack S)
{
if (S->top == -1) {
printf("The stack is empty!\n");
return -1;
}else {
int x = S->data[S->top];
S->top--;
return x;
}
链式存储的栈:

typedef struct SNode {
int data;
struct SNode *next;
}SNode,*Stack;

Stack CreateStack (int n);
void Push (Stack S,int x);
int Pop (Stack S);
void PrintS (Stack S);

int main ()
{
Stack S = CreateStack(5);
PrintS(S);

return 0;
}

void PrintS (Stack S)
{
Stack p = S;
while (p->next) {
printf("%d ",Pop(S));
}

printf("\n");
}

Stack CreateStack (int n)
{
Stack S;
S = (SNode*)malloc(sizeof(SNode));
S->next = NULL;

int i ;
for(i = 0 ;i < n;i++){
Push(S,i);
}

return S;
}

void Push (Stack S,int x)
{
Stack p = S;
Stack temp;
temp = (SNode*)malloc(sizeof(SNode));
temp->data = x;
temp->next = p->next;
p->next = temp;
}

int Pop(Stack S)
{
if(!S->next) {
printf("The stack is empty!\n");
return -1;
}
Stack p = S;
Stack temp = p->next;
p->next = temp->next;
int x = temp->data;
free(temp);

return x;
}

顺序存储的队列:

typedef struct node {
int *data;
int front;
int rear;
int maxsize;
}Node,*Queue;

Queue CreateQueue (int maxsize);
void EnQueue (Queue Q,int x);
int DeQueue (Queue Q);
void PrintQ (Queue Q);
int IsFull (Queue Q);
int IsEmpty (Queue Q);


int main ()
{
Queue Q = CreateQueue(6);
//PrintQ(Q);
EnQueue(Q,10);
PrintQ(Q);
EnQueue(Q,10);
printf("%d ",DeQueue(Q));

return 0;
}

void PrintQ(Queue Q)
{
int i;
Queue q = Q;
for(i = 0; i < q->maxsize - 1;i++){
printf("%d ",DeQueue(q));

}

printf("\n");
}
Queue CreateQueue (int maxsize)
{
Queue q;
q = (Queue)malloc(sizeof(Node));
q->data = (int*)malloc(sizeof(int)*maxsize);
q->front = 0;
q->rear = 0;
q->maxsize = maxsize;

int i;
for(i = 0;i < maxsize - 1;i++) {
EnQueue(q,i+1);
}

return q;
}

void EnQueue (Queue Q,int x)
{
Queue q = Q;
if (IsFull(q)) {
printf("The queue is full!\n");
}else {
q->data[q->rear] = x;
q->rear = (q->rear+1) % q->maxsize;
}
}

int DeQueue (Queue Q)
{
Queue q = Q;
if (IsEmpty(q)){
printf("The queue is empty!\n");
return -1;
}else {
int x = q->data[q->front];
q->front = (q->front+1) % q->maxsize;
return x;
}
}

int IsFull (Queue Q)
{
Queue q = Q;
return ((q->rear + 1) % q->maxsize) == q->front;
}

int IsEmpty (Queue Q)
{
Queue q;
return (q->front == q->rear);

}

 

由于时间问题和能力问题,函数的名字等等设计得不是很好,及代码也不是很完美,而且我一句注释都没有打,太懒了,还是不能拖到一天,该完成的就得当时完成。最后,你会发现,单链表,栈,队列他们都是运用的一种结构,只是插入的思路和输出的思路不同罢了,至于对代码的刨析,就不写了(时间问题),如果有读者看不懂的话,可以留言问我。今天就写到这里了,对于链式存储的队列,明天再写吧,哎,前面欠的债,躲得过初一,躲不过十五。加油,期待下一次!

标签:return,int,前三章,代码,List,maxsize,data,Stack
来源: https://www.cnblogs.com/ranyang/p/13795683.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有