廣義表的建立與基本操作

來源:互聯網
上載者:User
 

廣義表的建立與基本操作(15分)
成績: 15 / 折扣: 0.8
在本實驗中,需要同學們實現以下廣義表的操作:
1. Status CreateGList(GList &L, char *S) // 根據字串 S 表示的廣義表內容建立廣義表資料結構;
2. GList GetHead(GList L) // 取表頭運算
3. GList GetTail(GList L) // 取表尾運算
4. void DestroyGList(GList &L) // 銷毀廣義表 L
5. void PrintGList(GList L) // 顯示廣義表 L 內容
程式運行時,首先輸入一個廣義表,表中的原子是小寫字母。隨後可以交替輸入取表頭或取表尾指令(分別用 1 和 2 表示),取的結果替代當前廣義表,並釋放相應的資源(需將釋放資源資訊輸出)。當廣義表是空或是原子時,程式停止運行。
例: (下面的黑體為輸入)
((a,()),c,d)
generic list (a,()),c,d)
1
destroy tail
free list node
generic list a,())
2
free head node
free list node
generic list ())
1
destroy tail
free list node
generic list )

#include <stdio.h>#include <stdlib.h>#include <string.h>void GetHead(char glist[100]){        int i,len,kuo=0;        len = strlen(glist);        for (i = 1;i < len;i++)        {                if (glist[i] == '(')                {                        glist[i-1]=glist[i];                        kuo++;                        continue;                }                else if (glist[i] == ')' && kuo != 0)                {                        glist[i-1]=glist[i];                        kuo--;                        continue;                }                else if (glist[i] == ',' && kuo == 0)                {                        glist[i-1]='\0';                        break;                }                else if (i == len-1)                {                        glist[i-1]='\0';                        break;                }                glist[i-1]=glist[i];        }}void GetTail(char glist[100]){        int i,j,k=1,len,kuo;        char gtemp[100];        gtemp[0] = '(';        len=strlen(glist);        for (i=1,kuo=0;i<len;i++)        {                if (glist[i] == '(')                {                        kuo++;                }                else if (glist[i] == ')' && kuo != 0)                {                        kuo--;                }                else if (glist[i] == ',' && kuo == 0)                {                        i++;                        break;                }        }        if (i == len)        {                gtemp[k++]=')';                gtemp[k]='\0';                strcpy(glist,gtemp);                return;        }        for (j=i,k=1;j<=len;j++)        {                gtemp[k++]=glist[j];        }        strcpy(glist,gtemp);}void main(){        int i,j,k,type;        char glist[100];        gets(glist);        printf("generic list: ");        puts(glist);        while (glist)        {                if (strcmp(glist,"()") == 0 || glist[1] == '\0')                {                        break;                }                scanf("%d",&type);                switch(type)                {                case 1:                        GetHead(glist);                        printf("destroy tail\n");            printf("free list node\n");                        printf("generic list: ");                        puts(glist);                        break;                case 2:                        GetTail(glist);                        printf("free head node\n");                        printf("free list node\n");                        printf("generic list: ");                        puts(glist);                        break;                }        }}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.