資料結構示例之用鍊錶實現順序佇列

2021-07-24 04:42:14 字數 1966 閱讀 8250

以下為「使用鍊錶實現順序佇列」的簡單示例,由於使用陣列實現佇列時存在「假溢位」問題,建議使用鍊錶方式實現順序佇列:

1. 用c語言實現的版本

#include#includetypedef int datatype; /* 假定佇列元素的資料型別為整型 */

typedef struct nodequeuenode;

typedef structlinkqueue;

/*初始化佇列,將順序佇列置空*/

void initial(linkqueue *q)

/* 判斷佇列是否為空 */

int isempty(linkqueue *q)

/* 進入佇列,新增尾結點 */

int push(linkqueue *q, datatype x)

p->data = x;

p->next = null;

if (isempty(q)) /* 隊列為空 */

else /* 佇列非空 */

++q->count;

return 1;

}/* 彈出佇列,刪除頭節點 */

int pop(linkqueue *q, datatype *x)

p = q->front; /*指向頭結點*/

*x = p->data; /*儲存頭結點的資料*/

q->front = p->next; /*將頭結點從鏈上摘下*/

if (q->rear == p)/*佇列中只有乙個結點,刪去後佇列變空,此時隊頭指標已為空*/

free(p); /*釋放被刪隊頭結點*/

--q->count;

return 1; /*返回原隊頭資料*/

}/* 取佇列頂元素*/

int front(linkqueue *q, datatype* x)

*x = q->front->data;

return 1;

}/* 獲取佇列長度 */

datatype length(linkqueue *q)

void main()

else

break;

break;

case 2:

res = pop(&s,&value); /* 彈出佇列 */

if (res != -1)

else

break;

case 3:

res = front(&s, &value); /* 獲取首元素 */

if (res != -1)

else

break;

case 4:

value = length(&s); /* 獲取佇列長度 */

printf("佇列長度為:[%d]\n", value);

break;

default:

printf("please input the right choice !\n");

break;

} printf("\n(1)input a queue data.\n");

printf("(2)output a queue data.\n");

printf("(3)get first queue data.\n");

printf("(4)get queue length.\n");

printf("(5)exit.\n");

printf("please select your choice: ");

scanf("%d", &select);

} while (select != 5);

printf("\n");

}

執行結果如下圖所示:

資料結構01 順序表 鍊錶實現

概述 這學期初學資料結構,同時學c語言。由於修的二專,沒什麼夥伴可以一塊討論。困惑還是很多的,希望自己可以堅持下來吧。剛開始學的是線性表。線性表又可以分為順序表和煉表,兩者的區別在於儲存結構不同。順序表的儲存特點是依次儲存,位址連續。因為位址連續,所以可以隨機訪問。寫乙個構造體,命名為sqlist。...

資料結構《順序鍊錶》

include using namespace std template class sqlist template sqlist sqlist int m template sqlist sqlist template void sqlist createlist int n template t...

資料結構 順序表與鍊錶

順序表插入操作 temp seqlist list temp賦值為乙個結構體變數 for i temp length i pos i pos是插入的位置,注意是ta是下標 temp i int node 放新結點 temp length 刪除操作 for int i pos 1 ilength i ...