亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問板塊 發(fā)新帖
查看: 1670 | 回復(fù): 0
打印 上一主題 下一主題

[C] 發(fā)兩個(gè)棧的代碼,有興趣的來看看 [復(fù)制鏈接]

論壇徽章:
1
寅虎
日期:2014-11-30 21:25:54
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2010-02-07 22:21 |只看該作者 |倒序?yàn)g覽
本帖最后由 vbs100 于 2010-02-07 22:32 編輯
  1. $ cat stack1.c
  2. #include <stdio.h>
  3. #include <stdlib.h>

  4. #define STACK_INIT_SIZE        5
  5. #define STACKINCREMENT        5

  6. typedef struct {
  7.         void **base;
  8.         void **top;
  9.         int stacksize;
  10. } stack_t;

  11. void InitStack(stack_t *s){
  12.         s->base = malloc(STACK_INIT_SIZE * sizeof(void *));
  13.         if(!s->base) abort();
  14.         s->top = s->base;
  15.         s->stacksize = STACK_INIT_SIZE;
  16. }

  17. void Peak(stack_t *s, void **p){
  18.         if(s->base == s->top)
  19.                 *p = NULL;
  20.         else
  21.                 *p = *(s->top - 1);
  22. }

  23. void Push(stack_t *s, void *p){
  24.         if(s->top - s->base >= s->stacksize){
  25.                 s->base = realloc(s->base, (s->stacksize + STACKINCREMENT) * sizeof(void *));
  26.                 if(!s->base) abort();
  27.                 s->top = s->base + s->stacksize;
  28.                 s->stacksize += STACKINCREMENT;
  29.         }

  30.         *s->top++ = p;
  31. }

  32. void Pop(stack_t *s, void **p){
  33.         if(s->base == s->top)
  34.                 *p = NULL;
  35.         else
  36.                 *p = *--s->top;
  37. }

  38. typedef struct {
  39.         char name[16];
  40.         int value;
  41. }data_t;

  42. int main()
  43. {
  44.         int i;
  45.         stack_t S;
  46.         data_t *d1, *d2;

  47.         InitStack(&S);

  48.         for(i = 0; i < 20; i++)
  49.         {
  50.                 d1 = malloc(sizeof(data_t));
  51.                 sprintf(d1->name,"%d * %d = ", i, i);
  52.                 d1->value = i * i;
  53.                 Push(&S, d1);
  54.         }

  55.         Peak(&S, (void **)&d2);
  56.         if(d2) printf("%s%d\n", d2->name, d2->value);

  57.         for(i = 0; i < 30; i++)
  58.         {
  59.                 Pop(&S, (void **)&d2);
  60.                 if(!d2) break;
  61.                 printf("%s%d\n", d2->name, d2->value);
  62.                 free(d2);
  63.         }

  64. }
復(fù)制代碼
  1. $ cat stack2.c
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <sys/queue.h>

  5. typedef struct {
  6.         char name[16];
  7.         int value;
  8. }data_t;

  9. SLIST_HEAD(stack, node);
  10. struct node {
  11.         data_t data;
  12.         SLIST_ENTRY(node) p;
  13. };

  14. int main()
  15. {
  16.         int i;
  17.         struct stack S;
  18.         struct node *n1, *n2;

  19.         SLIST_INIT(&S);

  20.         for(i = 0; i < 20; i++)
  21.         {
  22.                 n1 = malloc(sizeof(struct node));
  23.                 sprintf(n1->data.name,"%d * %d = ", i, i);
  24.                 n1->data.value = i * i;
  25.                 SLIST_INSERT_HEAD(&S, n1, p);
  26.         }

  27.         n2 = SLIST_FIRST(&S);
  28.         if(n2) printf("%s%d\n", n2->data.name, n2->data.value);

  29.         for(i = 0; i < 30; i++)
  30.         {
  31.                 n2 = SLIST_FIRST(&S);
  32.                 if(!n2) break;
  33.                 printf("%s%d\n", n2->data.name, n2->data.value);
  34.                 SLIST_REMOVE_HEAD(&S, p);
  35.                 free(n2);
  36.         }

  37. }
復(fù)制代碼
stack1.c 出自嚴(yán)蔚敏的書里,并稍做修改,我考慮的主要是減少數(shù)據(jù)拷貝,如果出入棧的數(shù)據(jù)是原子型,那還是用原書的代碼吧
stack2.c 是queue.h的使用例子吧,我寫出來主要是想是和上面代碼進(jìn)行比較,大家如果有更好的實(shí)現(xiàn)不妨也拿出來分享下
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP