The LinkStNode for Linked stack | Data

简介: The code in Data book (5th Edition) from the 83 page to 86 page

The code in Data book (5th Edition) from the 83 page to 86 page

Update completed
#define MaxSize 50
typedef int ElemType;

typedef struct linknode {
    ElemType data;//Data domain
    struct linknode *next;//Pointer domain
} LinkStNode;

//Initialize the stack
void InitStack(LinkStNode *&s) {
    s=(LinkStNode *)malloc(sizeof(LinkStNode));
    s->next=NULL;
}

//Create linked stack
void CreateLinkStack(LinkStackNode *&L, ElemType a[], int n) {
    LinkStackNode *s, *r;
    L = (LinkStackNode *)malloc(sizeof(LinkStackNode));   //Create head node
    r = L;  //r point to tail node
    for (int i = 0; i < n; i++) {   //Loop create data node
        s = (LinkStackNode *)malloc(sizeof(LinkStackNode));
        s->data = a[i]; //Create node s
        r->next = s; //Insert node s to end of node r
        r = s;
    }
    r->next = NULL; //Set tail node is NULL
}

//Destroy linked stack
void DestroyStack(LinkStNode *&s) {
    LinkStNode *p=s, *q=s->next;
    while (q!=NULL) {
        free(p);
        p=q;
        q=p->next;
    }
    free(p);    //Free up its space
}

//Into stack
void Push(LinkStNode *&s,ElemType e) {
    LinkStNode *p;
    p=(LinkStNode *)malloc(sizeof(LinkStNode));
    p->data=e; //Create node p of elements e
    p->next=s->next;
    s->next=p;
}

//Out stack
bool Pop(LinkStNode *&s,ElemType &e) {
    LinkStNode *p;
    if (s->next==NULL)    //When stack is NULL
    return false;
    p=s->next; //p point to start node
    e=p->data;
    s->next=p->next;
    free(p); //Release p
    return true;
}

//Top element of the stack
bool GetTop(LinkStNode *s,ElemType &e) {
    if (s->next==NULL)    //When stack is NULL
        return false;
    e=s->next->data;
    return true;
}

//Output linked stack
void ShowLinkStack(LinkStackNode* L) {
    LinkStackNode* p = L->next;  //p point to head node
    while (p != NULL) { //When p no NULL, output data of node p
        printf("%d ", p->data);
        p = p->next;    //Move p to next node
    }
    printf("\n");
}
如有侵权,请联系作者删除
目录
相关文章
|
7月前
|
Swift
Could not find auto-linked library 'swiftObjectiveC'
Could not find auto-linked library 'swiftObjectiveC'
67 0
|
存储 算法 C++
STL——list、stack与queue
STL——list、stack与queue
|
索引
LeetCode 142. Linked List Cycle II
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。
109 0
LeetCode 142. Linked List Cycle II
Data Structures (三) - 栈Stack实现
Data Structures (三) - 栈Stack实现
Data Structures (三) - 栈Stack实现
|
JavaScript
深入理解 V8 的 Call Stack
Call Stack(调用栈) 一般指计算机程序执行时子程序之间消息处理的相互调用产生的一些列函数序列,而且几乎所有的计算机程序都依赖于调用栈。
3640 0
|
数据建模
1097. Deduplication on a Linked List (25)
//思路:第一步用node将链表链接起来 存在v中 用ma判断是否重复 重复则pop 并push到re中 #include #include #include #include #include using na...
1043 0
|
DataX 程序员 算法
Single linked list by pointer
其实本应该从一般性的表讲起的,先说顺序表,再说链表 。但顺序表的应用范围不是很广,而且说白了就是数组的高级版本,他的优势仅在于两点:1.逻辑直观,易于理解。2.查找某个元素只需要常数时间——O(1),而与此同时,因为每个单元的物理内存都是连续的,所以不便于移动,不便于精细化操作,每次插入和删除都会带来巨额的时间开销。
1045 0
|
算法
[LeetCode]--237. Delete Node in a Linked List
Write a function to delete a node (except the tail) in a singly linked list, given only access to that node. Supposed the linked list is 1 -&gt; 2 -&gt; 3 -&gt; 4 and you are given the thi
1326 0