C语言 结构体使用,关于链表和栈的区别

#include<stdio.h>#include<malloc.h>typedefstructlist{intdata;structlist*next;//strust... #include<stdio.h>
#include<malloc.h>
typedef struct list {
int data;
struct list * next; //strust list next
} Node;
typedef struct {
Node * list;//Node list
//int numbe;
} stack;
//----------------------------------------------------------------
void add(Node ** head, int d) {
Node *p = malloc(sizeof(Node));
p->data = d;
p->next = NULL;
if (*head == NULL) {
*head = p;
} else {
Node* q = *head;
while (q->next != NULL) {
q = q->next;
}
q->next = p;
}
}
void delete(Node **head, int d) {
if (*head == NULL)
return;
if ((*head)->data == d) {
if ((*head)->next == NULL) {
free((*head));
*head = NULL;//??????????????????
return;
} else {
Node * m = (*head)->next;
free((*head));
*head = m;
return;
}
}
Node* p = (*head)->next;
Node* q = (*head);
while (p != NULL) {
if (p->data == d) {
q->next = p->next;
free(p);
return;
}
q = q->next;
p = p->next;
}
}
void update(Node *head, int d1, int d2) {
Node *p = head;
if (p == NULL)
return;
while (p != NULL) {
if (p->data == d1) {
p->data = d2;
return;
}
p = p->next;
}
printf("Not Found!");
}
int serach(Node* head, int d) {
Node *p = head;
while (p != NULL) {
if (p->data == d) {
return 1;
}
p = p->next;
}
return 0;
}
int length(Node *head) {
Node *p = head;
int total = 0;
while (p != NULL) {
total++;
p = p->next;
}
return total;
}
void print(Node * head) {
Node *p = head;
while (p != NULL) {
printf("%d\t", p->data);
p = p->next;
}
printf("\n");
return;
}
//------------------------------------------------------------------
int getlast(Node * head) {
if (head == NULL)
return -1;
if (head->next == NULL) {
return head->data;
} else {
Node *p = head;
while (p->next != NULL) {
p = p->next;
}
return p->data;
}
}
void push(stack* ps, int d) {
add(&ps->list, d);
//ps->numbe = ps->numbe + 1;
}
void pop(stack *s) {
delete(&(s->list), getlast(s->list));
//s->numbe = s->numbe - 1;
}
int top(stack *s) {
return getlast(s->list);
}
int length_stack(stack *s) {
return length(s->list);
}
int empty(stack *s) {
if (length_stack(s)) {
return 1;
} else {
return 0;
}
}
void print_stack(stack *s) {
print(s->list);
}
int main() {
stack *st = NULL;//此处应该是stack st;
st->list = NULL;
//st->numbe = 0;
push(st, 1);
push(st, 2);
while (empty(st)) {
printf("%d\t", top(st));
pop(st);
}
//-------------------------------
Node *head = NULL;//此处可以用指针!!!
add(&head, 1);
print(head);
return 0;
}
为什么stack不能声明一个指针去用,非要声明一个变量??为什么Node可以 声明一个指针??
展开
 我来答
厚灬黑
2013-04-11 · 超过50用户采纳过TA的回答
知道小有建树答主
回答量:212
采纳率:0%
帮助的人:118万
展开全部
Node是一个结构体,是可以声明一个指针
追问
stack难道不是结构体吗.?
伤我中国心
2013-04-11 · TA获得超过112个赞
知道答主
回答量:233
采纳率:0%
帮助的人:144万
展开全部
若是声明一个指针怎么存放数据啊,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式