栈的链式存储结构

4 Jan, 2020 - 2 minutes
栈的链式存储结构 先上代码: 头文件: #ifndef _STACK_H_#define _STACK_H_ #include <stdio.h>#include <stdlib.h> typedef int SElemType; typedef struct StackNode { SElemType data; struct StackNode* next; }StackNode; typedef struct StackNode* LinkStackPtr; typedef struct LinkStack { LinkStackPtr top; int counter; }LinkStack; void CreatStack(LinkStack* S); int Push(LinkStack* S,SElemType e); int Pop(LinkStack* S,SElemType* e); void ClearStack(LinkStack* S); void TraveStack(LinkStack* S); #endif // _STACK_H_ 具体实现: #include "stack.h" void CreatStack(LinkStack* S) { S->top = NULL; S->counter = 0; } int Push(LinkStack* S,SElemType e) { LinkStackPtr s = (LinkStackPtr)malloc(sizeof(StackNode)); s->data = e; s->next = S->top; S->top = s; S->counter++; return 0; } int Pop(LinkStack* S,SElemType* e) { LinkStackPtr p; if(S->counter == 0) return -1; *e = S->top->data; p = S->top; S->top = S->top->next; free(p); S->counter--; return 0; } void ClearStack(LinkStack* S) { LinkStackPtr p,q; p = S->top; while(p) { q = p->next; free(p); p = q; } S->top = NULL; printf("Stack is clear"); } void TraveStack(LinkStack* S) { LinkStackPtr p; p = S->top; while(p) { printf("%d\n",p->data); p = p->next; } } 测试:

刷题 链表1(C语言)

3 Jan, 2020 - 1 minutes
刷题-链表1(C语言) 题目描述: 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 解题思想 创建一个空链表 同时遍历两个链表将较小的插入到空链表后 当一个链表遍历结束后,将另一个链表剩下的部分全部插入到新建的链表后 删除头节点,返回链表地址 代码 /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){ struct ListNode* p; struct ListNode* q; p = (struct ListNode*)malloc(sizeof(struct ListNode));//创建空链表 q = p;//给工作指针赋值 while((l1 != NULL) && (l2 != NULL) )//同时遍历两个链表 { if(l1->val <= l2->val) { q->next = l1; l1 = l1->next; }else{ q->next = l2; l2 = l2->next; } q = q->next;//千万不要忘记 } q->next = (l1 !

线性表的链式存储结构

2 Jan, 2020 - 2 minutes
线性表的链式存储结构 先上代码: #ifndef _LIST_H_#define _LIST_H_ #include <stdio.h>#include <stdlib.h>#include <time.h> typedef int ElemType; typedef struct Node { ElemType data; struct Node* next; } Node; typedef struct Node* LinkList; void CreateListHead(LinkList *L,int n); int TraveList(LinkList L); int getElem(LinkList L,int i,ElemType* e); int ListInsert(LinkList* L,int i,ElemType e); int ListDelete(LinkList* L,int i,ElemType* e); int ClearList(LinkList* L); #endif // _LIST_H_ #include "list.h" void CreateListHead(LinkList* L,int n){ LinkList p; int i; *L = (LinkList)malloc(sizeof(Node)); (*L)->next = NULL; srand(time(0));//初始化随机数种子 for(i = 0;i < n;i++){ p = (LinkList)malloc(sizeof(Node));//为新节点开辟空间 p->data = rand()%100 + 1; p->next = (*L)->next; (*L)->next = p; } } int TraveList(LinkList L) { int i = 0; LinkList p; p = L; while(p->next) { i++; p=p->next; printf("the number is %d,the data is %d\n",i,p->data); } return i; } int getElem(LinkList L,int i,ElemType* e){ int j = 1; LinkList p; p = L->next; while(p && j<i) { p = p->next; j++; } if(!