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