當前位置:首頁 » 參考文獻 » 鏈棧引用型

鏈棧引用型

發布時間: 2021-02-28 17:26:43

⑴ 數據結構-鏈棧-進棧問題

首先來這個函數的第一個參數有點問題源,應該是 LiStack *s。

它的內容很簡單。
s是指向LiStack類型的指針,p也是。p->next=s->next的意思就是把s後面的的一個LiStack結點放到p的後面去了,然後s->next=p,的意思就是把p連接在s的後面。總的意思就是生成了一個新結點p,然後把p插入在s的後面。
你弄不清楚可能是因為你沒有搞清楚LiStack的結構,這應該是一個結構體,然後裡面有一個自引用的指針成員變數next。就像這樣的,LiStack *next;
在紙上畫畫圖會很清晰的,把這些結點都畫一畫,一下就懂了。

⑵ 鏈棧的問題,想要有詳細過程

能不能把你的問題表達清楚了

⑶ 鏈棧結構代碼中typedef struct LinkStackPtr中的LinkStackPtr是什麼意思

C語言代碼中,typedef用於定義一個派生的新類型。對於結構的typedef語法基本是:內

typedef struct name_1
{
...
} name_2;

就是把name_2定義成:「struct name_1」。容

如果name_2的前面有個「*」,那實際就是把name_2定義成:「struct name_1 *」。

你所列的代碼中,

typedef struct StackNode
{
...
}*LinkStackPtr;

說明LinkStackPtr已經被定義成:「struct StackNode *」,即struct StackNode的指針。
所以下一個定義:

typedef struct LinkStackPtr
{
LinkStackPtr top;
int count;
}LinkStack;

其中LinkStackPtr就是剛才定義的「struct StackNode *」,即struct StackNode的指針。

這樣,就把struct StackNode的指針嵌入到LinkStack的結構中了。

希望我說明白了。有問題繼續交流。謝謝

⑷ 設鏈棧的類型定義如下,請寫出入棧的演算法

這是我寫的,希望可以幫助你。代碼可以直接運行。
/*實驗目的:掌握棧的鏈式存儲結構,實現鏈棧的初始化、創建、入棧、出棧等操作在鏈式存儲結構上的實現。
實驗任務:利用帶頭結點的鏈棧,實現十進制到八進制的轉換。
*/
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
typedef int datatype;
typedef struct node
{
datatype data;
struct node *next;
}linkstack;
void convert(datatype num)
{
if(num)
{
convert(num/8);
printf("%d",num%8);
}
}

linkstack *init(linkstack *init)
{
//生成頭結點
init=(struct node *)malloc(sizeof(linkstack));
init->data=2012;
init->next=NULL;
printf("初始化完成\n");
return init;
}
//入棧
linkstack *push_stack(linkstack *push)
{
datatype y=0;
scanf("%d",&y);
while(y!=-1)
{
linkstack *new;
new=(struct node *)malloc(sizeof(linkstack));
new->data=y;
new->next=push->next;
push->next=new;
scanf("%d",&y);
}
return push;
}
//出棧 時輸出8進制數
void pull(linkstack *begin)
{

linkstack *start=begin->next;
if(begin->next!=NULL)
{
while(start->next!=NULL)
{
printf("\t%d對應的八進制數是:",start->data);
convert(start->data);
start=start->next;
printf("\n");
}
printf("\t%d對應的八進制數是:",start->data);
convert(start->data);
begin->next=NULL;
printf("\n");
return;
}
else
{
printf("棧為空,無元素可以刪除\n");
return;
}
}
//10進制轉8進制
datatype order()
{
datatype a=0;
printf("\t\t\t1.入棧\n");
printf("\t\t\t2.出棧\n");
printf("\t\t\t3.退出\n");
printf("selection order:\n");
scanf("%d",&a);
return a;
}
void select()
{
datatype x;
linkstack *p,*q=NULL;
q=init(p);
while(1)
{
x=order();
switch(x)
{
case 1:
printf("輸入入棧值,以 -1結束:\n");
q=push_stack(q);
break;
case 2:
pull(q);
break;
default:
system("pause");
exit(1);
break;
}
}
}
datatype main()
{
select();
//linkstack *t=NULL;
//select(t);
return 0;
}

⑸ 1) 1)鏈棧結點類型定義為: typedef struct node { int

1 思路: 主要是鏈表的插入和刪除操作
2 代碼
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int data;
struct node *next;
}node_type;

void push(node_type* &stack, int elem){
node_type*node = (node_type*)malloc(sizeof(node_type));
node->data = elem;
node->next = stack;
stack = node;
}
int pop(node_type* &stack){
int elem = stack->data;
node_type*node = stack;
stack = stack->next;
free(node);
return elem;
}
bool IsEmpty(node_type* stack){
return stack == NULL;
}
void display(node_type*stack){
while (stack){
("%d ", stack->data);
stack = stack->next;
}
puts("");
}
void destroy(node_type*stack){
while (!IsEmpty(stack)){
pop(stack);
}
}
int main(){
puts("(1) 建立空鏈棧");
node_type*stack = NULL;
puts("\n(2) 調用進棧函數,將從鍵盤輸入的數據元素逐個進棧,輸入0結束;");
int num;
scanf("%d", &num);
while (num != 0){
push(stack, num);
scanf("%d", &num);
}
puts("\n(3) 顯示進棧後的數據元素");
display(stack);
puts("\n(4) 調用兩次出棧函數,顯示出棧後的數據元素");
if (!IsEmpty(stack))
printf("%d\n", pop(stack));
if (!IsEmpty(stack))
printf("%d\n", pop(stack));

destroy(stack);
getchar();
getchar();
return 0;
}
3 運行效果

⑹ 用c語言實現鏈棧時,對於結點所定義的數據類型是什麼

一般是用結構體

⑺ 虛心請教關於鏈棧的小細節的問題,關於自定義函數裡面的變數的定義理解。

LinkStack &S,這個其實是個指抄針的指針,
應為襲你要申請內存,
如果不是引用的話,參數傳遞時,或復制一個S1在堆棧上,s1和s的地址指向是一樣的,然後S1指向新開辟的內存地址,但是S沒有變。所以不傳遞引用無法初始化。

LinkStack S,這個只是輸出,復制一個S1在堆棧上,但是這個S1是指向LinkStack的,所以可以調用LinkStack的方法欄位。

⑻ 鏈棧如何定義

#define int datatype (此處的int可根據具體情況改為其他內數據類型容)
typedef struct node
{
datatype data;
struct node *next
}linkStack;
linkStack *top;

⑼ 請教一個關於鏈棧的問題

LinkStack &S,這個其實是個指針的指針,
應為你要申請內存,
如果不是引用的話,內參數傳遞時,或復制一個容S1在堆棧上,s1和s的地址指向是一樣的,然後S1指向新開辟的內存地址,但是S沒有變。所以不傳遞引用無法初始化。

LinkStack S,這個只是輸出,復制一個S1在堆棧上,但是這個S1是指向LinkStack的,所以可以調用LinkStack的方法欄位。

⑽ 鏈棧結點存儲結構:

其實這個就是鏈表嘛。。一般書上都有講的。。第二個struct後面有*,說明next是一個指向SNODE結構體的指針,指向鏈表下一個元素的地址

鏈表這個一般人都是學c一個月後才學的,比較難。建議不要急,慢慢學,先把基礎打好。

關於你私底下問我的問題,在此也回答

傳指針(實際上就是地址。。)的例子
int p; (假設開辟空間時p 被分配給了3001H、3002H 兩個位置)
p=2003;
那麼&p就是3001H這個地址

引用的例子:
int a;
int &ra=a; //定義引用ra,它是變數a的引用,即別名

其實更好的例子在譚浩強書上有,不過我現在手頭上沒帶書。。

熱點內容
塗鴉論文 發布:2021-03-31 13:04:48 瀏覽:698
手機資料庫應用 發布:2021-03-31 13:04:28 瀏覽:353
版面217 發布:2021-03-31 13:04:18 瀏覽:587
知網不查的資源 發布:2021-03-31 13:03:43 瀏覽:713
基金贖回參考 發布:2021-03-31 13:02:08 瀏覽:489
懸疑故事範文 發布:2021-03-31 13:02:07 瀏覽:87
做簡單的自我介紹範文 發布:2021-03-31 13:01:48 瀏覽:537
戰略地圖參考 發布:2021-03-31 13:01:09 瀏覽:463
收支模板 發布:2021-03-31 13:00:43 瀏覽:17
電氣學術會議 發布:2021-03-31 13:00:32 瀏覽:731